分析:
每个位上的数字的N次幂之和等于它本身
(例如:153=1×1×1+5×5×5+3×3×3):这里需要把数字的每一位提取出来,然后进行N次幂之和。
计算所有N位水仙花数:需要采用for循环遍历和range()函数(创建整数列表)找出所有的数字,然后筛选、输出。
方法一:采用选择分支结构,分别列出N为3、4、5的情况。代码如下所示:
注意:在这里采用的提取位数的方式是比较传统的整除和取余计算。
还有一种就是使数字以字符串的形式,然后利用字符串元素的访问形式提取。接下来就采用第二种方式解题。
方法二:主要利用for循环。
源码
n = int(input())
for i in range(10**(n-1), 10**n):
sum = 0
for j in str(i):
sum += int(j)**n
if sum == i:
print(i)
在36行时,为什么会是str(i)?
因为在这里,由于上面的迭代,i已经是int整型,是不可迭代对象,不能迭代,所以需要强制转化为可迭代对象,如字符串。
运行结果: