ソースは以下の通り。
#include "puzutl.h" int diff( cstring s) { cstring t = "30727582735"; int n = 0; for( int i=0; i< 11; i++) { if( *s++ != *t++) n++; } return n; } char dec2chr(int i) { return '0' + (i%10); } int main( int argc, cstring argv[]) { int cnt = 0; int k; char buf[128]; ProcTime pt; pt.start(); for( int i=1; i< 1000; i++) { for( int j=1; j< 1000; j++) { k = i*j; cnt++; if( k >= 100000) break; astring p = buf; *p++ = dec2chr(i/100); *p++ = dec2chr(i/10); *p++ = dec2chr(i); *p++ = dec2chr(j/100); *p++ = dec2chr(j/10); *p++ = dec2chr(j); *p++ = dec2chr(k/10000); *p++ = dec2chr(k/1000); *p++ = dec2chr(k/100); *p++ = dec2chr(k/10); *p++ = dec2chr(k); *p = NIL; if( diff(buf) == 2) ps( "%03dx%03d=%05d\n", i, j, k); } } pt.end(); ps( "%g 秒(%d回)\n", pt.sec(), cnt); return 0; }
プログラムの実行結果は以下の通り。
301x275=82775
0.625 秒(330057回)