题目:
例子:
分析题目:
主要目的:给定一个范围小于等于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;
}
总结学到什么:
- 可以先实现单独然后再通过单独的进行遍历确定范围内的
- 可以在获取数据的时候判断是否满足条件,若已经不满足就不要再往后了