题解 | #自守数#

自守数

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;
}
全部评论

相关推荐

object3:开始给部分🌸孝子上人生第一课了
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务