【手把手带你刷好题】—— 35.水仙花数(鹏哥的写法)(作业、非力扣)

举报
安然无虞 发表于 2022/05/26 22:54:19 2022/05/26
【摘要】 【前言】 今天是刷题打卡第35天! 不负代码不负卿,加油老铁们。 原题:水仙花数(自幂数) 题目描述: 打印1~100000之间的水仙花数,水仙花数指的是一个n 位数,其各位数字的n 次方之和刚好等于该数本身。 示例: 153 = 1^3 + 5^3 + 3^3 思路: 先判断是几位数再求每一位的...

【前言】

今天是刷题打卡第35天!

不负代码不负卿,加油老铁们。

原题:水仙花数(自幂数)

题目描述:

打印1~100000之间的水仙花数,水仙花数指的是一个n 位数,其各位数字的n 次方之和刚好等于该数本身。

示例:

153 = 1^3 + 5^3 + 3^3
 

思路:

  1. 先判断是几位数
  2. 再求每一位的n 次方之和(模十除十)  

错误示范: 


  
  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5. int i = 0;
  6. for (i = 0; i <= 100000; i++)
  7. {
  8. int sum = 0;
  9. int n = 1;//每一个数最少是一个一位数
  10. //先判断是几位数
  11. while (i /= 10)
  12. {
  13. n++;//注意n 要初始化成1开始
  14. }
  15. //再求每一位数字的n次方之和
  16. while (i)
  17. {
  18. sum += pow(i % 10, n);
  19. i /= 10;
  20. }
  21. if (sum == i)
  22. {
  23. printf("%d ", i);
  24. }
  25. }
  26. return 0;
  27. }

上面的代码好像逻辑没啥问题,但是实际上是有大问题的,因为i 在循环体内部是不断变化的,这是很危险的,更是错误的! 

正确代码:


  
  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5. int i = 0;
  6. for (i = 0; i <= 100000; i++)
  7. {
  8. int temp = i;
  9. int sum = 0;
  10. int n = 1;//每一个数最少是一个一位数
  11. //先判断是几位数
  12. while (temp /= 10)
  13. {
  14. n++;//注意n 要初始化成1开始
  15. }
  16. //再求每一位数字的n次方之和
  17. temp = i;//注意这一步!
  18. while (temp)
  19. {
  20. sum += pow(temp % 10, n);
  21. temp /= 10;
  22. }
  23. if (sum == i)
  24. {
  25. printf("%d ", i);
  26. }
  27. }
  28. return 0;
  29. }

高大上函数包装:

https://blog.csdn.net/weixin_57544072/article/details/121409554https://blog.csdn.net/weixin_57544072/article/details/121409554icon-default.png?t=LA92https://blog.csdn.net/weixin_57544072/article/details/121409554

结语

今天是刷题打卡第35天!

加油吧少年。

文章来源: bit-runout.blog.csdn.net,作者:安然无虞,版权归原作者所有,如需转载,请联系作者。

原文链接:bit-runout.blog.csdn.net/article/details/121706501

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。