czzhbq 发表于 2020-12-30 09:45:13

水仙花数的代码看不太懂,请帮忙解释一下吧

for i in range(100,1000):
    sum = 0
    temp = i
    while temp:
      sum = sum + (temp % 10) ** 3
      temp //= 10
    if sum == i:
      print(i)



我现在知道这个代码是怎么运行的,但是这个代码怎么与这个公式 153=1^3+5^3+3^3 等价呢?

风过无痕1989 发表于 2020-12-30 10:15:51

本帖最后由 风过无痕1989 于 2020-12-30 10:31 编辑

将 153 拆分成百位、十位、个位上的数,再分别求其立方,判断三个立方和是否等于该数,若是就是水仙数花,若相等就不是水仙花数

就153而言:1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153

下一个水仙花数是 370 = 3^3 + 7^3 +0^3 = 27 + 343 + 0

371 =3^3 + 7^3 +1^3 = 27 + 343 + 1

407 = 4^3 + 0^3 +7^3 = 64 + 0 + 343

1000 以内就这四个水仙花数

将循环变量赋给 temp,然后 temp % 10 取得个位上的数,将该数求立方后赋给 sum,再将 temp 除 10,便是取十位上的数,立方后与之前的个位上的立方相加,再一次除 10,就是取百位上的数,立方后与 sum (此时的和是个位与十位上的数的立方和)相加,于是,便求得了三个位上的立方和

昨非 发表于 2020-12-30 10:26:12

for i in range(100, 1000):#遍历100到1000所有整数
   sum = 0#定义求和变量,初值为0
   temp = i
   while temp:#当i得值不等于0时,一直循环
       sum = sum + (temp%10) ** 3 #temp取余10得到最后一位的数值,sum等于temp各位数之和
       temp //= 10         # 注意这里要使用地板除 这里得到temp的前两位
   if sum == i: #判断i是否等于其各位数的三次方之和
       print(i)#打印满足情况的i得值

jackz007 发表于 2020-12-30 10:57:08

本帖最后由 jackz007 于 2020-12-30 14:03 编辑

for i in range(100,1000):
    sum = 0                           # sum 用于在内循环中累加,开始前,先对其清 0
    temp = i                            # i 在内循环中需要修改, 而 i 还有用,所以增加临时变量 temp 代替 i
    while temp:                         # 内循环入口,只要 temp 不为 0 值就开始或继续循环
      sum = sum + (temp % 10) ** 3    # 取出 temp 的个位数求取立方后与 sum 累加
      temp //= 10                     # temp = temp // 10 , 个位数被舍弃。其效果,temp 向右移动一个 10 进制位,比如,139,右移 1 位后,成为 13,9 被舍弃
    if sum == i:                        # 循环结束,如果 i 的个、十、百位数的立方和与 i 相等
      print(i)                        # i 就是一个"水仙花数

czzhbq 发表于 2020-12-30 14:01:15

明白了,谢谢大家的帮助{:7_113:}

1589895304 发表于 2021-3-12 00:52:10

这个原理就是把100到1000内,从100开始每次增一个单位的三次方 比如1001**3第二个是100加2**3 以此类推,所有数据完毕后!再跟sum也就是和对比,是的就打印出来

江湖散人 发表于 2021-3-23 18:44:56

sum = sum + (temp % 10) ** 3   
temp //= 10


这两句为什么不能合成一句呢?
sum == int(temp%10)**3 + int(temp%100)**3 + int(temp/10%10)**3

小时候可帅了 发表于 2021-4-19 23:47:57

你看这样 能不能看懂
for x in range(1,9):
       for y in range(0,9):
            for z in range
            (0,9):
                     if x*100 + y*10 + z == x**3 + y**3 + z**3:
                            print(x*100 + y*10 + z)

小时候可帅了 发表于 2021-4-19 23:48:45

小时候可帅了 发表于 2021-4-19 23:47
你看这样 能不能看懂
for x in range(1,9):
       for y in range(0,9):


复制的有问题 ,大概就是这样 感觉能好理解些
页: [1]
查看完整版本: 水仙花数的代码看不太懂,请帮忙解释一下吧