水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个3位数,该数字每个位上数字的立方之和正好等于它本身,例如:13+53+33=1531^3 + 5^3+ 3^3=153

比如我们寻找一下三位数的水仙花数,

1
2
3
4
5
6
7
8
9
10
for num in range(100, 1000):
low = num % 10
mid = num // 10 % 10
high = num // 100
if num == low ** 3 + mid ** 3 + high ** 3:
print(num)
# 153
# 370
# 371
# 407

以上算法十分浅显易懂,我们也可以通过循环写下通解。

1
2
3
4
5
6
7
8
9
10
11
12
for num in range(100,10000):
sum = 0
n = len(str(num))

temp = num
while temp > 0:
digit = temp % 10
sum += digit ** n
temp //= 10

if num == sum:
print(num)
1
2
3
4
5
6
7
153
370
371
407
1634
8208
9474
1
2
3
4
5
6
7
8
9
10
lower=int(input("Please input a number: "))
upper=int(input("Please input a number: "))
sum=0
for num in range(lower,upper):
l = len(str(num))
for n in str(num):
sum=sum+int(n)**l
if num==sum:
print(num)
sum=0