UY-Scuti 发表于 2024-1-22 21:31:07

水仙花数

如图,这个代码求水仙花数(如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。)
哪里错了,怎么改进呢

FishC 发表于 2024-1-22 21:31:29

您的代码出现了两个问题:
1. 您的判断条件有问题,应该是判断各位数字的立方和是否等于原数,而不是三次方的和等于原数。
2. 您的输出语句位置有问题,应该在循环结束后输出结果。

下面是改进后的代码:

for num in range(100, 1000):
    # 获取百位、十位、个位的数字
    hundreds = num // 100
    tens = (num % 100) // 10
    ones = num % 10
   
    # 判断水仙花数条件:各位数字的立方和等于原数
    if num == hundreds ** 3 + tens ** 3 + ones ** 3:
      print(num)

这样就可以正确地找出范围内的水仙花数了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

stumblemodel 发表于 2024-1-22 21:55:45

这是对的(仅限思路)
问题在python中不存在^的运算,乘方用**就可以

a36804070 发表于 2024-1-23 08:42:43

我感觉你的这个sum,应该在找到一个水仙花数print(i)以后要置回0吧?不然在后面的遍历里,不就会一直累加上去?我没跑过程序,只是单纯看着。不知道对不对

jackz007 发表于 2024-1-23 09:40:48

本帖最后由 jackz007 于 2024-1-23 10:17 编辑

for i in range(100 , 1000) :
    sum = 0                              # 每个 i 都得初始化 sum 的值为 0,这是循环累加的必需步骤
    for j in str(i) :
      sum += int(j) * int(j) * int(j)
    if sum == i :                        # 判断是否水仙花数得在内层循环结束后,也就是累加完之后
      print(i)
      不用借助字符串的版本
for i in range(100 , 1000) :
    sum , j = 0 , i
    while j :
      sum , j = sum + (j % 10) * (j % 10) * (j % 10) , j // 10
    if sum == i :
      print(i)
页: [1]
查看完整版本: 水仙花数