为何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
相关产品推荐
相关产品推荐

