题解 | #自守数#
自守数
http://www.nowcoder.com/practice/88ddd31618f04514ae3a689e83f3ab8e
这个题的小坑在于题目没有说清输入格式
示例1提示一次能够输入多个数据,所以在函数体外加个死循环即可。
#include<stdio.h>
#include<math.h>
#include<Windows.h>
#pragma warning(disable:4996)
//HJ99 自守数
//自守数是指一个数的平方的尾数等于该数自身的自然数。
//例如:25 ^ 2 = 625,76 ^ 2 = 5776,9376 ^ 2 = 87909376。请求出n(包括n)以内的自守数的个数
//数据范围: 1≤n≤10000
int judge(int data) //判断该数是否为自守数
{
int squ = (int)pow(data, 2);
while (data)
{
int data_unit = data % 10; //从后向前依次比较
int squ_unit = squ % 10;
if (squ_unit != data_unit)
{
break;
}
squ /= 10;
data /= 10;
}
if (data == 0)
{
return 1;
}
return 0;
}
void Function(int data)
{
int count = 1; //计数变量 自守数永远有0
for (int i = 1; i <= data; i++)
{
if (judge(i))
{
count++;
}
}
printf("%d\n", count);
}
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF) //EOF宏(即-1),这里判断scanf是否接收到数据
{
Function(n);
}
system("pause");
return 0;
}