Day.4 刷题练习(自守数)

 题目:

例子:

分析题目:

主要目的:给定一个范围小于等于N,在这个范围中找自守数(自身等于平方后的尾部数据如5:5 ^ 2 == 25 , 然后 5 与 平方的后的尾部相等)

思路(本人解法):

  1. 先实现确定一个数是否是自守数
  2. 然后再遍历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;
}

总结学到什么:

扫描二维码关注公众号,回复: 15995956 查看本文章
  • 可以先实现单独然后再通过单独的进行遍历确定范围内的
  • 可以在获取数据的时候判断是否满足条件,若已经不满足就不要再往后了

猜你喜欢

转载自blog.csdn.net/ZYK069/article/details/131983133