You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求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

代码关键说明

  1. 保存原数副本:用original_num来做拆分操作,保证最后比较的num还是最初的三位数,这是很多人忽略的核心点!
  2. 正确拆分各位:用%10取个位,//10去掉个位,循环到数字为0,就能依次拿到个位、十位、百位的数字。
  3. 确保立方计算正确:用**3或者digit*digit*digit,保证是三次方运算。

你可以对照自己的代码,看看是不是踩了上面的某一个坑,调整后应该就能正常输出阿姆斯特朗数啦!

内容的提问来源于stack exchange,提问作者Web King

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:09:16