鱼C论坛

 找回密码
 立即注册
查看: 1379|回复: 4

[已解决]求助 水仙花数 参考答案看不懂

[复制链接]
发表于 2020-7-17 22:44:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
for i in range(100,1000):
        sum = 0
        temp = i
        while temp:
                sum = sum +(temp%10)**3
                temp //=10
        if sum == i:
                print(i)
求大神 给在下详细解释一下 这是小甲鱼留的课后作业 水仙花数的参考答案
在下有些看不懂
如果 153是水仙花数 带入的话 貌似 sum!=i啊!
在下小白 望各位大神帮帮在下
最佳答案
2020-7-17 22:50:59
本帖最后由 jackz007 于 2020-7-17 22:57 编辑

    没错,153 是一个水仙花数,因为:
    1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3 = 1 + 125 + 27 = 153

    就以 i = 153 为例,把 while temp 循环展开如下:
  1.     sum = 0
  2.     i = 153
  3.     temp = 153
  4.     进入 while temp 循环
  5.         【第1次循环】:
  6.         sum = sum + (temp % 10) ** 3 = 0 + (153 % 10) ** 3 = 3 ** 3
  7.         temp //= 10 = 153 // 10 = 15
  8.         【第2次循环】:
  9.         sum = sum + (temp % 10) ** 3 = 3 ** 3 + (15 % 10) ** 3 = 3 ** 3 + 5 ** 3
  10.         temp //= 10 = 15 // 10 = 1
  11.         【第3次循环】:
  12.         sum = sum + (temp % 10) ** 3 = 3 ** 3 + 5 ** 3 + (1 % 10) ** 3 = 3 ** 3 + 5 ** 3 + 1 ** 3
  13.         temp //= 10 = 1 // 10 = 0
  14.         至此,temp = 0 循环结束
  15.         【结果】:
  16.         sum = 3 ** 3 + 5 ** 3 + 1 ** 3
  17.     if sum == i:
  18.         print(i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-17 22:50:59 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-7-17 22:57 编辑

    没错,153 是一个水仙花数,因为:
    1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3 = 1 + 125 + 27 = 153

    就以 i = 153 为例,把 while temp 循环展开如下:
  1.     sum = 0
  2.     i = 153
  3.     temp = 153
  4.     进入 while temp 循环
  5.         【第1次循环】:
  6.         sum = sum + (temp % 10) ** 3 = 0 + (153 % 10) ** 3 = 3 ** 3
  7.         temp //= 10 = 153 // 10 = 15
  8.         【第2次循环】:
  9.         sum = sum + (temp % 10) ** 3 = 3 ** 3 + (15 % 10) ** 3 = 3 ** 3 + 5 ** 3
  10.         temp //= 10 = 15 // 10 = 1
  11.         【第3次循环】:
  12.         sum = sum + (temp % 10) ** 3 = 3 ** 3 + 5 ** 3 + (1 % 10) ** 3 = 3 ** 3 + 5 ** 3 + 1 ** 3
  13.         temp //= 10 = 1 // 10 = 0
  14.         至此,temp = 0 循环结束
  15.         【结果】:
  16.         sum = 3 ** 3 + 5 ** 3 + 1 ** 3
  17.     if sum == i:
  18.         print(i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-7-18 13:16:47 | 显示全部楼层
jackz007 发表于 2020-7-17 22:50
没错,153 是一个水仙花数,因为:
    1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3 = 1 + 125 + 27 = 153

不好意思 大神 我还是看不懂
按照原代码 我能看懂的是
第一步 i在一个100到1000的列表当中 并进入循环
第二部 设定两个变量
第三部 就是把 temp带入到循环当中 但此时 temp只是等于 i的值 并不是等于i的长度啊
循环体里面 temp对10取余 我理解为 i的值对10取余 而不是i的值 百位对10取余

整体的话 我就是看不懂 将i的值 分别百位 十位 个位对10取余这个过程 看不懂
我理解的话 可以用三个变量 分别乘以 100 10 1再相加的写法来写i的值
小白瞎想 请大神谅解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-18 13:20:18 | 显示全部楼层
额 看明白了 想明白了 多谢大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-18 15:40:47 | 显示全部楼层
牛哇
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 23:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表