题目描述
自守数是指一个数的平方的尾数等于该数自身的自然数。
例如:
25^2=625
76^2=5776
9376^2=87909376
请求出200000以内的自守数?
输入格式
无
输出格式
200000以内的自守数(包括0, 数之间用两个空格分开,末尾无空格)
样例输入
复制
无
样例输出
复制
0 1 5 6 25 76 376 625 9376 90625 109376
我封装一个函数之后可以满足格式输出要求,这里如果把i定义为int就错了,猜测是int到long的转化出了些问题
(后来发现其实根本不用最后换行累...而且就算要这样,你也不用知道最后一个,你只用知道第一个就够了...你懂的)
#include <stdio.h>
int db(long long int x)
{
int i, n = 0;
for(i=1; x/i; i*=10, n++);
return n;
}
int pow_(int x)
{
int i, k = 1;
for(i=0; i<x; i++)
k *= 10;
return k;
}
int def(long long int x)
{
int n;
long long int b, i;
for(i=x+1; i<=200000; i++)
{
n = db(i);
b = i*i;
if(b%pow_(n) == i)
return 1;
}
return 0;
}
int main()
{
int n;
long long int b, i;
for(i=0; i<=200000; i++)
{
n = db(i);
b = i*i;
// b = 1LL*i*i;(如果你定义i为int类型,你这里就要强制类型转换
if(b%pow_(n) == i)
{
printf("%lld", i);
if(def(i))
printf(" ");
else
printf("\n");
}
}
return 0;
}