欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

[布洛克刷题]每日一练--自以为是的数字

最编程 2024-03-17 18:58:35
...

hello,进来的小伙伴们,你们好呐!

系列专栏:【牛客刷题】

作者简介:一名双非本科的大三在读生,我很平凡,学会努力!

给大家推荐一个超级好用的刷题网站——牛客网!‘


一、自守数

数学的世界有很多很漂亮的数字或者数字集合,比如梅森数,哥德巴赫猜想,水仙花数,完全数,自守数。今天我们就一起来探究一下自守数。自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376。请求出n以内的自守数的个数。

输入格式:

第一行输入n,随后输入n个数m。

输出格式:

在一行中输出m以内自守数的个数,所有输出在一行内完成,末尾没有多余空格。

输入样例:

   5

   1

   2

   3

   4

   5

输出样例:

2 2 2 2 3

解题思想:本题第一个关键就是要先求出我们给出数字的位数,然后用n*n除以pow(10,number);便可得到我们的数字n,与之比较是否相等,若相等,则count++,因为0就是自守数,所以最后我们输出的时候是count+1;

   #include<stdio.h>

   #include<math.h>

   //计算位数

   int number(int m)

   {

       int count = 0;

       while(m!=0)

       {

           count++;

           m = m/10;

       }

       return count;

   }

   //计算切断之后的数

   int cutNumber(int x,int number)

   {

       return x%(int)pow(10,number);

   }

   int main()

   {

       int n = 0;

       int m=0;

       scanf("%d",&n);

       while(n--)

       {

           int count = 0;

           scanf("%d",&m);

           for(int i=1;i<=m;i++)

           {

               if(i==cutNumber(i*i,number(i)))

               {

                   count++;

               }

           }

           if(n==0)

           {

               printf("%d",count+1);

           }

           else

           {

               printf("%d ",count+1);

           }

       }

       return 0;

   }