鱼C论坛

 找回密码
 立即注册
查看: 1306|回复: 2

[已解决]第九课课后作业:动动手:1 水仙花那道题答案有点看不懂,有没有大佬能帮忙讲下

[复制链接]
发表于 2022-3-9 16:59:24 | 显示全部楼层 |阅读模式
30鱼币
for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10         # 注意这里要使用地板除哦~
    if sum == i:
        print(i)
最佳答案
2022-3-9 16:59:25
for i in range(100, 1000):      #水仙花数指的是每个位置的三次幂之和等于其本身的三位数,因此range范围为100-1000
    sum = 0     #定义sum = 0,满足水仙花数要求的数
    temp = i    #定义temp = i,当前range值
    while temp:    #创建循环,如果temp为真则重复循环
        sum = sum + (temp%10) ** 3    #(temp%10) ** 3:temp余的三次幂
        temp //= 10         # temp地板除10
    if sum == i:    #判断sum
        print(i)

while循环里,经历了两次循环,拿第一个水仙花数153为例,进入循环时temp=153,sum=0,然后开始循环内运算,sum=0+(153%10)**3 = 0+3**3=27,temp//10=15;进入第一次循环,此时temp=15,sum=27,循环结束时sum=152,temp=1。。。。。。最终出循环时sum=153,此时sum等于本次for循环的range,因此输出sum。
最后的if判断是为了判断sum是否还是进入循环时的ramge值,如果是才满足水仙花数要求。
如i=101时,sum出while循环时sum值为2,2 != 101,因此不满足。

最佳答案

查看完整内容

for i in range(100, 1000): #水仙花数指的是每个位置的三次幂之和等于其本身的三位数,因此range范围为100-1000 sum = 0 #定义sum = 0,满足水仙花数要求的数 temp = i #定义temp = i,当前range值 while temp: #创建循环,如果temp为真则重复循环 sum = sum + (temp%10) ** 3 #(temp%10) ** 3:temp余的三次幂 temp //= 10 # temp地板除10 if sum == i: ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-9 16:59:25 | 显示全部楼层    本楼为最佳答案   
for i in range(100, 1000):      #水仙花数指的是每个位置的三次幂之和等于其本身的三位数,因此range范围为100-1000
    sum = 0     #定义sum = 0,满足水仙花数要求的数
    temp = i    #定义temp = i,当前range值
    while temp:    #创建循环,如果temp为真则重复循环
        sum = sum + (temp%10) ** 3    #(temp%10) ** 3:temp余的三次幂
        temp //= 10         # temp地板除10
    if sum == i:    #判断sum
        print(i)

while循环里,经历了两次循环,拿第一个水仙花数153为例,进入循环时temp=153,sum=0,然后开始循环内运算,sum=0+(153%10)**3 = 0+3**3=27,temp//10=15;进入第一次循环,此时temp=15,sum=27,循环结束时sum=152,temp=1。。。。。。最终出循环时sum=153,此时sum等于本次for循环的range,因此输出sum。
最后的if判断是为了判断sum是否还是进入循环时的ramge值,如果是才满足水仙花数要求。
如i=101时,sum出while循环时sum值为2,2 != 101,因此不满足。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-9 17:08:40 | 显示全部楼层
水仙花数特征 : 个位^3 + 十位^3 + 百位^3的和等于它本身

  1. for i in range(100, 1000):  # 限定范围100~1000
  2.     sum = 0           # 存放整数个位^3 + 十位^3 + 百位^3的和,并与该数比较
  3.     temp = i          # 待证明的整数,用另一个变量存放,避免计算时的数值改变
  4.     while temp:       #  退出条件 当 temp = 0时
  5.         sum = sum + (temp%10) ** 3 # 计算 个位^3 + 十位^3 + 百位^3的和
  6.         temp //= 10         # 地板除 => 123 // 10 = 12; 12 // 10 = 1; 1//10 =0 跳出循环
  7.     if sum == i:     # 判断是否为水仙花数
  8.         print(i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 00:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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