求100-999的阿姆斯特朗数:代码始终执行else分支问题求助
解决三位数阿姆斯特朗数代码始终走else的问题
别着急,我帮你捋捋问题出在哪!首先再明确下三位数阿姆斯特朗数的定义:一个三位数等于它百位、十位、个位数字的立方和,比如153 = 1³ + 5³ + 3³。你的代码全程触发else执行continue,说明计算出的立方和an从来没等于过原数num,大概率是计算逻辑的几个环节出了问题,我给你拆解常见错误点,再给你正确的参考代码:
常见错误原因
- 错误1:拆分各位数字时逻辑出错
比如在取十位、百位数字时用错了运算符:比如Python里用num/100会得到浮点数(比如153/100=1.53),如果没转成整数就会导致立方计算错误;或者十位数字应该用(num//10)%10,结果写成了num%100(那得到的是后两位数字15,不是5)。 - 错误2:立方计算用成了平方
不小心把digit**3写成了digit**2,或者digit*digit*digit写成digit*digit,这样立方和肯定远小于原数,自然不会相等。 - 错误3:循环中修改了原数
num
很多同学会直接对循环变量num做拆分操作(比如num = num//10),导致最后比较的时候num已经变成0了,和计算出的an当然不可能相等。
正确的参考代码(Python为例)
# 遍历100到999的所有三位数 for num in range(100, 1000): # 必须保存原数的副本!避免拆分时修改原数 original_num = num armstrong_sum = 0 # 拆分每一位数字并计算立方和 while original_num > 0: # 取当前数字的个位 digit = original_num % 10 # 累加个位数字的立方 armstrong_sum += digit ** 3 # 去掉当前数字的个位,继续处理十位、百位 original_num = original_num // 10 # 比较立方和与原数 if armstrong_sum == num: print(f"找到阿姆斯特朗数:{num}") else: continue
代码关键说明
- 保存原数副本:用
original_num来做拆分操作,保证最后比较的num还是最初的三位数,这是很多人忽略的核心点! - 正确拆分各位:用
%10取个位,//10去掉个位,循环到数字为0,就能依次拿到个位、十位、百位的数字。 - 确保立方计算正确:用
**3或者digit*digit*digit,保证是三次方运算。
你可以对照自己的代码,看看是不是踩了上面的某一个坑,调整后应该就能正常输出阿姆斯特朗数啦!
内容的提问来源于stack exchange,提问作者Web King
相关产品推荐
相关产品推荐

