鱼C论坛

 找回密码
 立即注册
查看: 2838|回复: 9

[已解决]解水仙花数求助

[复制链接]
发表于 2020-2-17 16:00:09 | 显示全部楼层 |阅读模式

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

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

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)
最佳答案
2020-2-17 16:45:35
本帖最后由 jackz007 于 2020-2-17 16:48 编辑

        本题对初学者而言,不太好理解的是 while temp 循环,这里把它展开,因为 i 是 3 位数,所以,会循环 3 次,循环体中的语句也会执行 3 次:
for i in range (100 , 1000):
    sum = 0
    temp = i
    sum = sum + (temp % 10) ** 3      # (temp % 10) 得到 i 的个位
    temp = temp // 10                 # temp = i // 10,i 的个位被舍弃,i 的百位、十位依序变为 temp 的十位、个位
    sum = sum + (temp % 10) ** 3      # (temp % 10) 得到 i 的十位
    temp = temp // 10                 # temp = i // 100,i 的十位、个位被舍弃,i 的百位变为 temp 的个位
    sum = sum + (temp % 10) ** 3      # (temp % 10) 得到 i 的百位
    temp = temp // 10                 # temp 的值为 0
    if i == sum:
        print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-17 16:12:07 | 显示全部楼层
我也是新人,昨晚做了这个。
我的理解就是通过把 i 除以 10 求余数,得到个位数
循环三次得到个、十、百位数(中间用地板除把比如153变成15方便求下一位)

但是我也想问的是为什么一开始要sum=0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 16:19:25 | 显示全部楼层
因为最后打印的是i,sum只是一个测试它是不是水仙花数的变量
所以用完后必须要重新赋值为0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-17 16:45:35 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-2-17 16:48 编辑

        本题对初学者而言,不太好理解的是 while temp 循环,这里把它展开,因为 i 是 3 位数,所以,会循环 3 次,循环体中的语句也会执行 3 次:
for i in range (100 , 1000):
    sum = 0
    temp = i
    sum = sum + (temp % 10) ** 3      # (temp % 10) 得到 i 的个位
    temp = temp // 10                 # temp = i // 10,i 的个位被舍弃,i 的百位、十位依序变为 temp 的十位、个位
    sum = sum + (temp % 10) ** 3      # (temp % 10) 得到 i 的十位
    temp = temp // 10                 # temp = i // 100,i 的十位、个位被舍弃,i 的百位变为 temp 的个位
    sum = sum + (temp % 10) ** 3      # (temp % 10) 得到 i 的百位
    temp = temp // 10                 # temp 的值为 0
    if i == sum:
        print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 17:01:04 | 显示全部楼层
jackz007 发表于 2020-2-17 16:45
本题对初学者而言,不太好理解的是 while temp 循环,这里把它展开,因为 i 是 3 位数,所以,会循 ...

谢谢老哥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 18:03:26 | 显示全部楼层
jackz007 发表于 2020-2-17 16:45
本题对初学者而言,不太好理解的是 while temp 循环,这里把它展开,因为 i 是 3 位数,所以,会循 ...

为什么会循环3次啊 不是100-999吗,扎心我还是没看懂……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 18:44:42 | 显示全部楼层
这个答案超赞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-17 19:35:10 | 显示全部楼层
jackz007 发表于 2020-2-17 16:45
本题对初学者而言,不太好理解的是 while temp 循环,这里把它展开,因为 i 是 3 位数,所以,会循 ...

谢谢讲解,明白啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 22:52:11 | 显示全部楼层
你知道吗我会 发表于 2020-2-17 18:03
为什么会循环3次啊 不是100-999吗,扎心我还是没看懂……

我的理解是:
因为是三位数,比如i=153,赋值给 temp,
第一次while循环:temp%10得到3,然后sum=3**3=27,然后153地板除10后为15
进入第二次循环,此时temp%10即15%10等于5,然后sum=27 + 5**3=152,然后15地板除10后为1
进入第三次循环,此时temp%10即1%10等于5,然后sum=152 + 1=153,然后1地板除后为0
因为此时temp值为0,即代表"False",而while False会终止循环,所以一共循环3次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-18 11:51:23 | 显示全部楼层
酒醉三分醒 发表于 2020-2-17 22:52
我的理解是:
因为是三位数,比如i=153,赋值给 temp,
第一次while循环:temp%10得到3,然后sum=3**3= ...

终于懂了!感谢!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 00:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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