#include//自守數算法 //ep : 25 ^ 2 = 625 76 ^ 2 = 5776 9376 ^ 2 = 87909376 /*ep : * 376 被乘數 * *376 乘數 * ------ --------- * 2256 第一個部分積=被乘數*乘數的倒數第一位 * 2632 第二個部分積=被乘數*乘數的倒數第三位 * 1125 第三個部分積=被乘數*乘數的倒數第三位 *-------- * 141376 將以上的部分積的後3位求和後截取後3位就是3位數乘積的後3位。 */ /*由number的位數確定截取數字進行乘法時的系數k*/ #define forech_bit_num(mul,number,k) \ for(mul=number,k=1;(mul/=10)>0;k*=10) ; //在0~xxxx這些數中尋找自守數 #define forech_number(number,num) \ for(number=0;number 0) { automorphic_number(mul,number , k ,ll ,kk); k/=10; /*k為截取被乘數時的系數*/ ll*=10; } if(number==mul){ /*判斷若為自守數則輸出*/ printf("%ld ", number); } } } int main(void) { print_automorphic_number(1000); return 0 ; }