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

为何Python程序无法输出10000以内剩余的阿姆斯特朗数?仅输出到407

问题原因与解决方案

核心问题

你的代码仅输出部分阿姆斯特朗数,是因为错误地固定使用3次幂进行计算,违背了阿姆斯特朗数的定义:

阿姆斯特朗数(自幂数)是指一个n位数,其每个位上的数字的n次幂之和等于它本身。

比如:

  • 1位数(n=1):每个数字的1次幂就是自身,因此1-9都是阿姆斯特朗数,但你的代码中rem ** 3会把数字2计算为8,不等于原数,所以无法输出。
  • 4位数(n=4):需要每个数字的4次幂之和等于原数(如8208=8⁴+2⁴+0⁴+8⁴),但你的代码用3次幂计算,自然无法匹配。

修正后的代码

def checkArmStrong(num):
    if num == 0:
        return True
    # 计算数字的位数n
    digit_count = len(str(num))
    sum_powers = 0
    temp = num
    while temp > 0:
        rem = temp % 10
        sum_powers += rem ** digit_count
        temp //= 10
    return sum_powers == num

for x in range(1, 10000):
    if checkArmStrong(x):
        print(x)

关键改动说明

  • 新增位数计算:通过len(str(num))获取当前数字的位数digit_count,替代固定的3次幂
  • 幂次匹配位数:将rem ** 3改为rem ** digit_count,确保不同位数的数字使用对应的幂次计算

运行结果

修正后代码会输出10000以内所有阿姆斯特朗数:
1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 8208, 9474

内容的提问来源于stack exchange,提问作者Niraj Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:40:04