水仙花数
如图,这个代码求水仙花数(如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。)哪里错了,怎么改进呢 您的代码出现了两个问题:
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 小助理,如未能正确解答您的问题,请继续追问。 这是对的(仅限思路)
问题在python中不存在^的运算,乘方用**就可以 我感觉你的这个sum,应该在找到一个水仙花数print(i)以后要置回0吧?不然在后面的遍历里,不就会一直累加上去?我没跑过程序,只是单纯看着。不知道对不对 本帖最后由 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]