鱼C论坛

 找回密码
 立即注册
查看: 3121|回复: 6

[已解决]python 009课后 求100~999水仙花数

[复制链接]
发表于 2017-4-1 16:40:05 | 显示全部楼层 |阅读模式

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

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

x
for i in range (100,1000):
    temp = i
    sum = 0
    while temp:
        sum = sum + (temp%10)**3
        temp //= 10
    if sum == i:
        print (i)

小甲鱼的答案没看懂,求大神讲解
最佳答案
2017-4-3 10:24:40
本帖最后由 小书包 于 2017-4-3 10:26 编辑

for i in range (100,1000):#表示范围为100-999
    temp = i#temp用于接受i的个位,十位,百位
    sum = 0
    while temp:#第一次进入循环,取出个位。第二次进入循环,取出除以10以后的个位。这样类推
        sum = sum + (temp%10)**3#求余数,并开三次方
        temp //= 10#除以表示除出来的为整型,方便进行第二次的取出个位。
    if sum == i:
        print (i)
注释:
比如105
1.第一次进入while循环,求余数取出个位5,并给它三次开方,将值赋给sum。
2.然后105除以10,得到的是整型10。
3.10再次进入循环,求余数取出个位0,并给它三次开方,加上原来的sum,将值赋给sum。
4.最后再除以10,等于1,1跟10求余数,得到1,然后继续老步骤。这样就分别把1,0,5拿出来了,算好他们的三次开方的值,sum跟i相等就打印。这个就是水仙花数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-1 17:10:28 | 显示全部楼层
sum = sum + (temp%10)**3 先将temp的每一位数取出 (temp%10) 计算其位数的3次方 算到总和sum里面,然后将temp //= 10 留下百位数和千位数,以此类推,到了只有个位数的时候temp //= 10不就是0嘛 while的条件是Temp 在编程中 0就是False 非0就是True ,跳出循环 ,这个时候sum就是各位数的3次方之和 与原本的数作比较 如果一致就是水仙花数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-1 17:51:59 From FishC Mobile | 显示全部楼层
其实可以写成1行代码输出:
>>> print [i for i in range(100,1000) if sum([int(t)**3 for t in str(i)]) == i]
[153, 370, 371, 407]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-1 18:48:51 | 显示全部楼层
temp%10 为取最后一位数,
temp //= 10 是去掉最后一位数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-3 10:24:40 | 显示全部楼层    本楼为最佳答案   
本帖最后由 小书包 于 2017-4-3 10:26 编辑

for i in range (100,1000):#表示范围为100-999
    temp = i#temp用于接受i的个位,十位,百位
    sum = 0
    while temp:#第一次进入循环,取出个位。第二次进入循环,取出除以10以后的个位。这样类推
        sum = sum + (temp%10)**3#求余数,并开三次方
        temp //= 10#除以表示除出来的为整型,方便进行第二次的取出个位。
    if sum == i:
        print (i)
注释:
比如105
1.第一次进入while循环,求余数取出个位5,并给它三次开方,将值赋给sum。
2.然后105除以10,得到的是整型10。
3.10再次进入循环,求余数取出个位0,并给它三次开方,加上原来的sum,将值赋给sum。
4.最后再除以10,等于1,1跟10求余数,得到1,然后继续老步骤。这样就分别把1,0,5拿出来了,算好他们的三次开方的值,sum跟i相等就打印。这个就是水仙花数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-6 21:03:36 | 显示全部楼层
好难理解,先马住,这两天再仔细看一下QAQ
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-25 18:08:12 | 显示全部楼层
for i in range(100,1000):
    if i == (int(str(i)[0])**3+int(str(i)[1])**3+int(str(i)[2])**3):
        print(i,end=" ")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 20:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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