鱼C论坛

 找回密码
 立即注册
查看: 1165|回复: 6

[已解决]关于水仙花数的意思

[复制链接]
发表于 2019-11-18 14:51:35 | 显示全部楼层 |阅读模式

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

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

x
  1. for i in range(100, 1000):
  2.     sum = 0
  3.     temp = i
  4.     while temp:
  5.         sum = sum + (temp%10) ** 3
  6.         temp //= 10         # 注意这里要使用地板除哦~
  7.     if sum == i:
  8.         print(i)
复制代码


其中的sum=0和开启循环后的各项意思不太明白,希望有大佬能够帮忙#一下备注
最佳答案
2019-11-18 15:21:16
本帖最后由 jackz007 于 2019-11-18 15:36 编辑
  1. for i in range(100, 1000):            # 循环变量 i 的变化范围是 100 ~ 999
  2.     sum = 0                           # 因为后面要采用循环累加方式计算立方和,先把累加值 sum 初始化 0
  3.     temp = i                          # 为了避免关键变量 i 在下一个循环中被破坏,开辟临时变量 temp
  4.     while temp:                       # 只要 temp 的值不为 0 就开始或继续循环
  5.         sum = sum + (temp%10) ** 3    # temp 对 10 取余,取到的是 temp 的个位数值,计算立方和累加
  6.         temp //= 10                   # temp = temp // 10,temp 个位数丢失,百位变十位,十位变个位,最终必然为 0
  7.     if sum == i:                      # 循环结束,如果累加结果与 i 相等
  8.         print(i)                      # 打印 i 的数值
复制代码


        由于 i 是个三位数,所以,while temp 将总共循环 3 次,3 次循环中,temp 将依次成为 3、2、1 位数, 表达式 temp % 10 也将依次取到 i 的个、十、百位上的数值。所以,循环结束的时候,sum 就是三个位上数值的立方和了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-18 15:21:16 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-11-18 15:36 编辑
  1. for i in range(100, 1000):            # 循环变量 i 的变化范围是 100 ~ 999
  2.     sum = 0                           # 因为后面要采用循环累加方式计算立方和,先把累加值 sum 初始化 0
  3.     temp = i                          # 为了避免关键变量 i 在下一个循环中被破坏,开辟临时变量 temp
  4.     while temp:                       # 只要 temp 的值不为 0 就开始或继续循环
  5.         sum = sum + (temp%10) ** 3    # temp 对 10 取余,取到的是 temp 的个位数值,计算立方和累加
  6.         temp //= 10                   # temp = temp // 10,temp 个位数丢失,百位变十位,十位变个位,最终必然为 0
  7.     if sum == i:                      # 循环结束,如果累加结果与 i 相等
  8.         print(i)                      # 打印 i 的数值
复制代码


        由于 i 是个三位数,所以,while temp 将总共循环 3 次,3 次循环中,temp 将依次成为 3、2、1 位数, 表达式 temp % 10 也将依次取到 i 的个、十、百位上的数值。所以,循环结束的时候,sum 就是三个位上数值的立方和了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-18 15:41:55 | 显示全部楼层
jackz007 发表于 2019-11-18 15:21
由于 i 是个三位数,所以,while temp 将总共循环 3 次,3 次循环中,temp 将依次成为 3、2、1 ...

非常感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-18 16:04:34 | 显示全部楼层
jackz007 发表于 2019-11-18 15:21
由于 i 是个三位数,所以,while temp 将总共循环 3 次,3 次循环中,temp 将依次成为 3、2、1 ...

sum = sum + (temp%10) ** 3   这个计算到的是个位数立方。
temp = temp // 10    这个计算到的是十位数和百位数一起的,个位数丢失,计算的时候不应该是个位数**3,十位数**3,百位数**3的综合么?代码里没看到计算十位数和百位数的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-18 17:23:01 | 显示全部楼层
本帖最后由 jackz007 于 2019-11-18 17:26 编辑
xxwoaini897 发表于 2019-11-18 16:04
sum = sum + (temp%10) ** 3   这个计算到的是个位数立方。
temp = temp // 10    这个计算到的是十位数 ...

  1. 举个例子,假如 temp = 597
  2. 第一次循环:temp = 597         597 % 10 = 7      sum = 7 ** 3                        temp = 597 // 10 = 59
  3. 第二次循环:temp =  59          59 % 10 = 9      sum = 7 ** 3 + 9 ** 3               temp =  59 // 10 =  5
  4. 第三次循环:temp =   5           5 % 10 = 5      sum = 7 ** 3 + 9 ** 3 + 5 ** 3      temp =   5 // 10 =  0
  5. temp = 0  循环终止
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-18 20:42:49 | 显示全部楼层

是我理解力不够,非常感谢您。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-18 22:09:05 From FishC Mobile | 显示全部楼层
这代码妙啊,学到了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 07:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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