自守数是指一个数的平方的尾数等于该数自身的自然数,如25^2=625,76^2=5776,9376^2=87909376。编程求x(x>10000)内的自守数。 程序运行结果示例: 请输入一个数表示范围: 20 结果是: 0 1 5 6 输入提示:"请输入一个数表示范围:\n" 输入格式:"%ld" 输出提示:"结果是:" 输出格式:"%5ld" "\n"
#define _CRT_SECURE_NO_WARNINGS//为了满足vs的兼容性
#include<stdio.h>
#include<math.h>
int main()
{
long x,m,i,j;
printf("请输入一个数表示范围:\n");
scanf("%ld", &x);
printf("结果是:");
for (i = 0; i <= x; i++)
{
m = pow(i,2);
if (i >= 0 && i <= 9)
{
j = 1;
}
else if(i>=10&&i<=99)
{
j = 2;
}
else if (i >= 100 && i <= 999)
{
j = 3;
}
else if (i >= 1000 && i <= 9999)
{
j = 4;
} //因为自守数的定义,我们需要判断原始数据的位数,来判断最后是除多少,(我尝试过用whlie循环来在for循环中计算原始数据的位数,但是因为在for循环中,会导致这个位数计算的是在输入范围中所有包含的数的位数之和,导致计算错误,而输入的范围有限,可以通过if语句实现程序实现判断位数)
if ((m - i) % ((long)pow(10, j)) == 0 && (i==0||i % 10 != 0))//判断是否为自序数。
{
printf("%5ld", i);
}
}
return 0;
}