为什么不把阿姆斯特朗的数字打印到1000?

2024-06-01 08:41:48 发布

您现在位置:Python中文网/ 问答频道 /正文

它在没有嵌套循环的情况下工作,只是为了检查输入编号是否为Armstrong编号

c=0
for y in range(1000):
    for x in str(y):
        c += int(x) ** len(str(y))
        if c == y:
            print(c)

Tags: inforlenif情况range编号int
2条回答

您的问题是变量c必须在每次迭代中清除:

for y in range(1000):
    c=0
    for x in str(y):
        c += int(x) ** len(str(y))
        if c == y:
            print(c)

或者您可以使用@CDJB中的变体:

for y in range(1000):
    if sum(int(x)**len(str(y)) for x in str(y)) == y:
        print(y) 

因为阿姆斯特朗数是这样的数,即该数的每一位的立方体之和等于原始数。您的代码似乎将每个数字提高到n次方,其中n等于数字中的位数。以下代码将打印小于1000的阿姆斯特朗号码:

for y in range(1000):
    if sum(int(x)**3 for x in str(y)) == y:
        print(y) 

输出:

0
1
153
370
371
407

从评论来看,阿姆斯特朗数字似乎有多种定义;如果您寻求其他定义,请参见下文@Mandy007的答案

相关问题 更多 >