求助 水仙花数 参考答案看不懂
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啊!
在下小白 望各位大神帮帮在下 本帖最后由 jackz007 于 2020-7-17 22:57 编辑
没错,153 是一个水仙花数,因为:
1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3 = 1 + 125 + 27 = 153
就以 i = 153 为例,把 while temp 循环展开如下:
sum = 0
i = 153
temp = 153
进入 while temp 循环
【第1次循环】:
sum = sum + (temp % 10) ** 3 = 0 + (153 % 10) ** 3 = 3 ** 3
temp //= 10 = 153 // 10 = 15
【第2次循环】:
sum = sum + (temp % 10) ** 3 = 3 ** 3 + (15 % 10) ** 3 = 3 ** 3 + 5 ** 3
temp //= 10 = 15 // 10 = 1
【第3次循环】:
sum = sum + (temp % 10) ** 3 = 3 ** 3 + 5 ** 3 + (1 % 10) ** 3 = 3 ** 3 + 5 ** 3 + 1 ** 3
temp //= 10 = 1 // 10 = 0
至此,temp = 0 循环结束
【结果】:
sum = 3 ** 3 + 5 ** 3 + 1 ** 3
if sum == i:
print(i) 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的值
小白瞎想 请大神谅解 额 看明白了 想明白了 多谢大神 牛哇
页:
[1]