鱼C论坛

 找回密码
 立即注册
查看: 710|回复: 8

关于求水仙花数字的问题

[复制链接]
发表于 2018-11-1 12:58:16 | 显示全部楼层 |阅读模式

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

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

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)

这个代码和解题思路实在想不懂。麻烦大牛可以逐行解释一下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-1 13:41:38 | 显示全部楼层
水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153);
代码中,从100到1000循环所有的3位数,置和为0,取一个temp=i用来做和计算,while循环的原理就是每次取个位上的余数作三次幂运算,加到sum上,然后temp再除以10,知道temp为0;
例如:153在while循环里:
temp=153 sum = 0+3**3    temp /=10
temp=15 sum = 3**3 + 5**3    temp /=10
temp = 1 sum = 3**3 + 5**3 +1**3    temp /=10
temp = 0 循环终止,判断sum和i是否相等
代码里temp //= 10改成 temp/=10
(感觉有点啰嗦)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-1 15:37:58 | 显示全部楼层
_ULTIMATE_CODER 发表于 2018-11-1 13:41
水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153);
...

还是不明白,置和为0是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-1 15:40:09 | 显示全部楼层
_ULTIMATE_CODER 发表于 2018-11-1 13:41
水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153);
...

我没看懂你说的“代码中,从100到1000循环所有的3位数,置和为0,取一个temp=i用来做和计算,while循环的原理就是每次取个位上的余数作三次幂运算,加到sum上,然后temp再除以10,知道temp为0;” 这是啥意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-1 16:15:49 | 显示全部楼层
可以利用sum和map函数求解:
for num in range(100,1000):
    if sum(map(lambda x:int(x)**3,str(num)))==num:
        print(num)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-1 16:24:22 | 显示全部楼层
或者干脆用一个推导式:
print([num for num in range(100,1000) if sum(map(lambda x:int(x)**3,str(num)))==num])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-1 17:47:18 | 显示全部楼层
_ULTIMATE_CODER 发表于 2018-11-1 13:41
水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153);
...

这个必须用//除,不能改用/除,否则将得不到整数的每个位的数字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-1 18:23:33 | 显示全部楼层
喜欢吃菠菜 发表于 2018-11-1 17:47
这个必须用//除,不能改用/除,否则将得不到整数的每个位的数字

为什么得不到?你先写个程序跑一跑再说吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-1 18:24:41 | 显示全部楼层
沈园晚醉 发表于 2018-11-1 15:40
我没看懂你说的“代码中,从100到1000循环所有的3位数,置和为0,取一个temp=i用来做和计算,while循环的 ...

你要理解水仙花数的定义啊,三位数n等于他三个位的数的三次方的和,这个和当然要计算,然后用一个变量来存放
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-6 15:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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