无极圣意 发表于 2020-4-29 21:03:20

这两行代码没看懂,求大神解惑!

本帖最后由 无极圣意 于 2020-4-29 21:04 编辑

编写一个程序,求 100~999 之间的所有水仙花数

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
这里没看懂

Justin1 发表于 2020-4-29 21:28:10

首先,要知道什么是水仙花数,水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
然后就好理解了,我要得到水仙花数,那么就需要将三位数的每一位进行乘方运算(可以写成**,也可以用math.h中的pow函数)。

举例:101
temp = 101
第一次运算   sum = 0 + (101%10)**3 = 0 +1 =1    temp = 101//10 = 10
第二次运算   sum = 1 +(10%10)**3 = 1 + 0 = 1   temp = 10//10 = 1
第三次运算   sum = 1 + (1%10)**3 = 1 + 1 =2       temp =1//10 = 0
循环结束    2 不等于101,所以101不是水仙花数

Justin1 发表于 2020-4-29 21:29:41

Justin1 发表于 2020-4-29 21:28
首先,要知道什么是水仙花数,水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如 ...

建议看不懂具体的符号时候,可以从概念本身出发,去理解。遇到不会的去百度,查资料。然后慢慢的一步一步就好理解了

无极圣意 发表于 2020-4-29 22:08:12

Justin1 发表于 2020-4-29 21:28
首先,要知道什么是水仙花数,水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如 ...

谢谢解惑~~~
页: [1]
查看完整版本: 这两行代码没看懂,求大神解惑!