/*Case 9
自守数
某个数的平方等于该数本身
求0~10000的所以自守数*/
#include <math.h>
int main() {
int i,a, k, m;
for ( i = 1; i <= 10000; i++)//在1-10000内依次检验
{
a = i;
a *= a; //求出i的平方
k = log10(i) + 1; //求出i的位数k
for ( m = 1; k ; k--) //看不明白
{
m *= 10; //看不明白
}
a %= m; //通过取余找出尾数
if (a==i) //判断i的平方的尾数是否等于i
{
printf("%d\n",i);
}
}
return 0;
}
自守数 是指一个数的平方的尾数等于该数自身的自然数
他先用 k = log10(i) + 1;求出位数,m从1到k循环每次m乘10,比如i=1234 那么m=10000
a此时等于i的平方,1234* 1234=1,522,756 用a对m求余看和i本身是否相等,1,522,756对1000求余就是后四位
是就是自首数
某个数的平方等于该数本身???除了0和1还有谁?
是不是搞错自守数概念了
自守数是指一个数的平方的尾数等于该数自身的自然数
应该将某数进行平方后,循环从该数最后一位向前逐个与平方后的数进行比较,如果全部相同则是自守数
修改如下:
/*Case 9
自守数
某个数的平方的尾数等于该数本身
求0~10000的所以自守数*/
#include <math.h>
int main() {
int i,a, k, m;
for ( i = 1; i <= 10000; i++)//在1-10000内依次检验
{
a = i*i;
k=i;
while(k>0)
{
if(a%10 != k%10) //不断比较最后一位数是否相同,不同则不是自守数
break;
a/=10; //两个数都去掉当前尾数
k/=10;
}
if(k==0) //如果k所有位数都比较完了,则i为自守数
printf("%d ",i);
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!