#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 ; }