欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

自守数算法:C语言实现

程序员文章站 2022-05-16 10:10:31
#include //自守数算法 //ep : 25 ^ 2 = 625 76 ^ 2 = 5776 9376 ^ 2 = 87909376 /*ep : * 376...
#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 ;
}