解题思路:
1.观察自守数:
0-0=0
1-1=0
25-5=20 (5一位数,20末尾1个0)
36-6=30
625-25=600
5776-76=5700 (76两位数,5700末尾2个0)
141376-376=141000 (376三位数,141000末尾3个0)
如果是自守数,他的平方数-自身的差的末尾0的个数一定是该数的位数

注意事项:
1.由于i计算到200000,所以设置存储i^2的变量为longlong类型
2.pow()的返回值类型double
3.%两边是整数

参考代码:

  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5. int i,len,a;
  6. long long s; //s比较大,用longlong存储
  7. for(i=0; i<=200000; i++)
  8. {
  9. len=1; //先默认为1位数
  10. s=pow(i,2);
  11. a=i; //由于后面要与i比较,如果不加一个变量a来存储i的值,下面循环对i的操作会改变i的值
  12. while(a>9) //计算数字的位数
  13. {
  14. a/=10;
  15. len++;
  16. }
  17. if(s%(int)pow(10,len) == i) //pow的返回值是double,求余两边只能是整型
  18. printf("%d ",i);
  19. }
  20. return 0;
  21. }

点赞(0)
 

0 分

0 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论