自守数 是指一个数的平方的尾数等于该数自身的自然数。
#include <stdio.h>
#include <math.h>
main()
{
long int m,k,j,i,n,r,count,u,b,c,d,e;
for(i=0; i<=199999; i++)
{
n=i;
m=i;
for(count=1; n>=0; count++)
{
n=n/10;
if(n==0) break;
}
for(b=1,c=0; b<=count; b++)
{
d=pow(10,b);
e=pow(10,b-1);
u=count+1-b;
r=pow(10,u);
c=c+(m%r)*(m%d/e)*e;
}
k=pow(10,count);
j=c%k;
if(j==i) printf(" %ld ",i);
}
printf("\n");
}
因为计算机无法表示过大的整数,所以无法采用“求出一个数的平方后再截取最后相应位数”的方法
376 被乘数
* 376 乘数
-------------------
2256 第一个部分积=被乘数*乘数的倒数第一位
2632 第一个部分积=被乘数*乘数的倒数第一位
1128 第一个部分积=被乘数*乘数的倒数第一位
-----------
141376 第一个部分积=被乘数*乘数的倒数第一位