Python FAQ 026 水仙花数(2)
本帖最后由 qiuyouzhi 于 2020-3-20 16:04 编辑Python FAQ 026 水仙花数
问题:
小甲鱼给出的答案是
for i in range(100, 1000):
sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 3
temp //= 10 # 注意这里要使用地板除哦~
if sum == i:
print(i)
是这个样子的。
但是我用的是用地板除,将各个数位的值算出来再进行
for num in range(100,1000):
hundred=num//100
ten=(num//10)%10
single=num%10
if num==hundred**3+ten**3+single**3:
print(num)
但是我看不懂小甲鱼的思路(一点都不懂),能有大神帮我解读一下嘛?
我的解答:
for i in range(100, 1000):
sum = 0 # 求和变量
temp = i # 不用i变量,防止被修改
while temp: # 只要temp不为0
sum = sum + (temp%10) ** 3 # 这是求末位,可以试一下153 % 10,结果肯定是3
temp //= 10 # 这里是去掉一位,用地板除是防止有小数,而且不用地板除达不到效果,可以试试153/10
if sum == i:# 如果符合要求,就输出
print(i) 我是这样理解的:
判断一个三位数的数字abc,甲鱼的思路是通过while循环
第一次循环:提取出个位数c(即由abc%10得c**3),十位百数ab(即abc//10)
第二次循环:提取出十位数b(即由ab%10得b**3),百位数a(即ab//10)
第三次循环:提取出百位数a(即由a%10得得a**3),这次循环后temp=0 false(此时while false 循环结束)
此时得到sum = a**3 + b**3 + c**3,再判断sum与i是否相等,相等则print(i)
甲鱼的思路与你的思路其实一样(因为水仙花数的判断方式就是这样,都是这个思路)只是实现方法不同而已罢了!
个人理解,欢迎指教。 你看看我的图 本帖最后由 flamezyy 于 2020-3-8 22:58 编辑
比如一个数255,我们首先要分别提取出百位十位个位,那可以用地板除法:
255 // 10 = 25 ... 5 temp = 255
25//10 = 2... 5 temp = 25
5 //10=0 ... 5 temp = 5
0// 10=0 temp = 0
可以看到当temp=0时,全部提取完毕,所以 循环终止可以设为while(temp)。
然后就是求所有余数的立方和 :
sum = sum + (temp%10)**3
如果sum == i(即temp):
打印i
我的是这样:
import math
for i in range(100, 1000):
num = list(str(i))
num =
if math.pow(num, 3) + math.pow(num, 3) + math.pow(num, 3) == i:
print(i, "是水仙花数!")
页:
[1]