题目:
例子:
分析题目:
主要目的:给定一个范围小于等于N,在这个范围中找自守数(自身等于平方后的尾部数据如5:5 ^ 2 == 25 , 然后 5 与 平方的后的尾部相等)
思路(本人解法):
- 先实现确定一个数是否是自守数
- 然后再遍历N一下的数确定是否为自守数(是的话就记录下)
如何确定自守数:
模拟的思路:要确定的话就是判断数与数的平方的尾部是否相等
那就需要得到数平方的尾部数据,可以先确定自身有几位,然后再在自身平方数后面取相同的几位,最后比较是否相同即可
#include <stdio.h>
int main() {
int n = 0;
scanf("%d",&n);
int tag = 0;//记录个数
for(int i = 0; i <= n ; i++)
{
int digit = 0;//记录数有几位数
int tmp = i;
//确定有几位
while(tmp)
{
tmp/=10;
digit++;
}
int number = 0;//存平方的尾部数据
tmp = i * i;
int j = 1; // 每位的不同
//取平方的尾部
while(digit--)
{
int t = tmp % 10;
t *= j;
number += t;
tmp /= 10;
j *= 10;
}
//判断是否相同
if( i == number)
{
tag++;
}
}
printf("%d",tag);
return 0;
}
总结学到什么:
- 可以先实现单独然后再通过单独的进行遍历确定范围内的
- 可以在获取数据的时候判断是否满足条件,若已经不满足就不要再往后了