鱼C论坛

 找回密码
 立即注册
查看: 1767|回复: 7

[已解决]小甲鱼第9讲课后习题

[复制链接]
发表于 2019-2-9 18:47:13 | 显示全部楼层 |阅读模式

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

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

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)

这个程序里下边这两行什么意思啊?为什么就起到了各位数三次幂之和的效果嘞?
        sum = sum + (temp%10) ** 3
        temp //= 10

求助大佬~
最佳答案
2019-2-9 22:15:36
可以这么理解
  1. for i in range(100, 1000):
  2.     sum = 0
  3.     temp = i
  4.     while temp:                                    #以下是i=153时候的例子
  5.         sum = sum + (temp%10) ** 3     # 通过temp%10来得到当前判断数字i=153的最后一位数,然后算三次方(3**3)并记录在sum里,现在sum=3**3
  6.         temp //= 10                # 通过小数点前移(除10小数点会向前移动一位),通过抹零‘//’去掉最后一位数,例如153在//后变成15.3,然后抹零变成15,(换行)
  7.                                     # 这样数字temp=153的最后一位就从153的3变成了15的5,方便循环下一步get到抹零之后的最后一位数字
  8.                                       # 循环回到sum那行,这回temp的最后一位变成了5,通过temp%10得到5之后计算5**3再与之前的3**3叠加,现在sum=3**3 + 5**3
  9.                                       #然后temp//=10抹零得到1(只剩一位了),最后循环一次sum,刚才两次的sum值(3**3 + 5**3)在叠加上1**3,现在sum=1**3+3**3+5**3
  10.     if sum == i:                     #sum=153之后在和原值i=153进行比对
  11.         print(i)                     #比对成功,打印153
复制代码
        


楼主如仍有疑问,欢迎追问

由于我也是刚学完这块不久,如有错误也欢迎大佬们指正

PLUS:小数点位移大法好
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-2-9 19:09:06 | 显示全部楼层
201929_190845.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-2-9 19:15:30 | 显示全部楼层

这里的sum是在一直增加吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-9 19:16:47 | 显示全部楼层
本帖最后由 jackz007 于 2019-2-9 19:19 编辑

假如 temp = 975

第一次循环:
temp = 975
temp % 10 = 5                  # 得到个位数
temp = temp // 10 = 97

第二次循环:
temp = 97
temp % 10 = 7                  # 得到十位数
temp = temp // 10 = 9

第三次循环:
temp = 9
temp % 10 = 9                   # 得到百位数
temp = temp // 10 = 0

temp = 0 循环终止
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-9 22:15:36 | 显示全部楼层    本楼为最佳答案   
可以这么理解
  1. for i in range(100, 1000):
  2.     sum = 0
  3.     temp = i
  4.     while temp:                                    #以下是i=153时候的例子
  5.         sum = sum + (temp%10) ** 3     # 通过temp%10来得到当前判断数字i=153的最后一位数,然后算三次方(3**3)并记录在sum里,现在sum=3**3
  6.         temp //= 10                # 通过小数点前移(除10小数点会向前移动一位),通过抹零‘//’去掉最后一位数,例如153在//后变成15.3,然后抹零变成15,(换行)
  7.                                     # 这样数字temp=153的最后一位就从153的3变成了15的5,方便循环下一步get到抹零之后的最后一位数字
  8.                                       # 循环回到sum那行,这回temp的最后一位变成了5,通过temp%10得到5之后计算5**3再与之前的3**3叠加,现在sum=3**3 + 5**3
  9.                                       #然后temp//=10抹零得到1(只剩一位了),最后循环一次sum,刚才两次的sum值(3**3 + 5**3)在叠加上1**3,现在sum=1**3+3**3+5**3
  10.     if sum == i:                     #sum=153之后在和原值i=153进行比对
  11.         print(i)                     #比对成功,打印153
复制代码
        


楼主如仍有疑问,欢迎追问

由于我也是刚学完这块不久,如有错误也欢迎大佬们指正

PLUS:小数点位移大法好
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-9 23:04:25 | 显示全部楼层
153 除以 10 的余数 为 3  #个位数为3
153 // 10  相当于 int(153/10) = 15
15 除以 10 的余数为 #5 十位数为5
15 // 10 相当于 int(15/10) = 1  #百位数为1

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-11 16:44:42 | 显示全部楼层
虚无→与→飘渺 发表于 2019-2-9 22:15
可以这么理解
         

握草懂了,毛茅塞顿开啊!
那我如果用水仙花数的方法各位数三次幂相加应该也是可以的吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-11 18:03:44 | 显示全部楼层
萌萌哒的小虎崽 发表于 2019-2-11 16:44
握草懂了,毛茅塞顿开啊!
那我如果用水仙花数的方法各位数三次幂相加应该也是可以的吧?

用这个方法算数字中各位数的幂在相加是可以的

如果答案没问题,麻烦选一下最佳答案按钮,这样也可以帮到更多的人,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-15 03:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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