ソースは以下の通り。
#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回)