求大佬教教我关于课后作业水仙花数的问题!!!
本帖最后由 Twilight6 于 2020-3-29 15:08 编辑鱼C零基础第9课的课后作业,没办法理解答案的。。。求大佬帮忙解释下!QAQ{:10_266:} {:10_266:} {:10_266:}
1. 编写一个程序,求 100~999 之间的所有水仙花数。
如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数
for i in range(100,1000):
sum = 0
temp = i
while temp:
sum = sum+ (temp%10)**3
temp //= 10
if sum == i:
print(i)
唉 ,刚刚开始学python,希望能一直坚持吧! 本帖最后由 qiuyouzhi 于 2020-3-14 15:32 编辑
for i in range(100,1000): # 范围
sum = 0 # 用于求每位的立方和
temp = i # 保护i变量
while temp: # 只要temp不为0
sum = sum+ (temp%10)**3 # 分解出一位,算立方
temp //= 10 # 减少1位
if sum == i: # 符合条件就打印
print(i)
>>> # 取最后一位
>>> 153 % 10
3
>>> # 去掉一位
>>> 153 // 10
15 本帖最后由 jackz007 于 2020-3-14 23:14 编辑
假设 i = 578,把 while temp 循环展开如下:
sum = 0
i = 578
temp = 578
进入 while temp 循环
【第1次循环】:
sum = sum + (temp % 10) ** 3 = 0 + (578 % 10) ** 3 = 8 ** 3
temp //= 10 = 578 // 10 = 57
【第2次循环】:
sum = sum + (temp % 10) ** 3 = 8 ** 3 + (57 % 10) ** 3 = 8 ** 3 + 7 ** 3
temp //= 10 = 57 // 10 = 5
【第3次循环】:
sum = sum + (temp % 10) ** 3 = 8 ** 3 + 7 ** 3 + (5 % 10) ** 3 = 8 ** 3 + 7 ** 3 + 5 ** 3
temp //= 10 = 5 // 10 = 0
至此,temp = 0 循环结束
【结果】:
sum = 8 ** 3 + 7 ** 3 + 5 ** 3
if sum == i:
print(i) jackz007 发表于 2020-3-14 16:00
假设 i = 578,把 while temp 循环展开如下:
谢谢,学到了! jackz007 发表于 2020-3-14 16:00
假设 i = 578,把 while temp 循环展开如下:
谢谢! !!! jackz007 发表于 2020-3-14 16:00
假设 i = 578,把 while temp 循环展开如下:
谢谢了 理解了 Twilight6 发表于 2020-3-14 19:50
谢谢! !!!
考古 sfqxx 发表于 2023-5-9 22:07
考古
哈哈哈,别,我害羞了
Twilight6 发表于 2023-5-9 22:22
哈哈哈,别,我害羞了
{:10_256:} sfqxx 发表于 2023-5-9 22:24
{:10_256:}
页:
[1]