求100000以内的|求100000以内的 自守数。

自守数是指一个数的平方的尾数等于该数自身的自然数。
例如:

5^2= 2525^2 = 62576^2 = 57769376^2 = 87909376

在C语言中文网 C语言求自守数 看到了一个例子,觉得是个新思路,自己跟着学习了一下 ,怎么也转不过来那个弯;
于是自己写了一份代码,我感觉思路应该是差不多的,理解起来也更容易一些
就是用原数字的各个位数字单独去乘原数字 得到一个数值,再对其保留位数求模(求模基数为比原数字大的最小的10^n)然后再乘以这个数字所在位的位权 各位就 1 ,十位就10 ,百位就是 100,
然后把所得各数相加,再对其保留位数求模
得数如果和原数字想等那这个数就是自守数
代码如下:(我觉得这样更容易理解)
#include int main() { int number,mul,k,a,b; for(number=1; number<=100000; number++)//遍历各数 {for(a=1,mul=number; mul>0; mul/=10) a*=10; //计算保留位数求模基数 mul=0; b=1; for(k=number; k>0; k/=10)//循环求各位数与原数字乘积再求模再乘位权 { mul=mul+(number*(k%10))%a*b; a/=10; //每次循环,求模数,降位 b*=10; //每次循环,位权数,升位 } mul%=b; //所得和 再求模 if(number==mul) printf("%d ",mul); //满足条件输出 } }

运行结果:
求100000以内的|求100000以内的 自守数。
文章图片

10000000以内的自守数对比:
求100000以内的|求100000以内的 自守数。
文章图片

【求100000以内的|求100000以内的 自守数。】

    推荐阅读