# 打印出所有的“水仙花数”。 所谓“水仙花数”,是指一个三位数,其各位数字的立方和等于该数本身。
"""
例如, 153 是一个“水仙花数”,因为 153=1^3 + 5^3 + 3^3。
"""
注:水仙花数 的方法有很多,大家可以根据自己的思路来写这个案例,这是我目前为止遇到的一个办法最多的案例了。
①第一步,案例要求是找出三位数的所有 水仙花数 ,所以我们需要找出所有的三位数;
②第二步,根据水仙花数的要求,所谓“水仙花数”,是指一个三位数,其各位数字的立方和等于该数本身。所以我们要通过for循环遍历一个数的每一位,int整数类型是无法遍历到每一位的,所以我们要先把整数转换成str字符串(后面记得转换回来),后面的操作就顺其自然了。
# 打印出所有的“水仙花数”。 所谓“水仙花数”,是指一个三位数,其各位数字的立方和等于该数本身。
# 例如, 153 是一个“水仙花数”,因为 153=1^3 + 5^3 + 3^3。
new_list = []
for i in range(100, 1000):
# 把所有的三位数存在一个列表里
new_list.append(str(i))
# 把列表里的每一个数依次提取出来
for x in new_list:
# 提取每个数的每一位
a = int(x[0])
b = int(x[1])
c = int(x[2])
if int(x) == a ** 3 + b ** 3 + c ** 3:
print(f"所有的水仙花数:{x}")
else:
continue
结果:
所有的水仙花数:153
所有的水仙花数:370
所有的水仙花数:371
所有的水仙花数:407
注:我想到的只有这一种办法,案例源代码 有好多种方法,你又是哪一种呢?
# 方法一
start = 101
end = 999
for i in range(start, end + 1):
# 计算百位上的数
bai = i // 100
# 计算十位、个位上的数
shi, ge = (i - bai * 100) // 10, i % 10
# 判断是否为水仙花数
if ge ** len(str(i)) + shi ** len(str(i)) + bai ** len(str(i)) == i:
print(i)
# 方法二
start = 1
end = 10 ** 7
for i in range(start, end + 1):
sm = 0
for j in str(i):
sm += (ord(j) - 48) ** len(str(i))
# 判断是否为水仙花数
if sm == i:
print(i)
# 方法三
a = [j for j in range(1, 10 ** 5)
if sum([(ord(i) - 48) ** len(str(j)) for i in str(j)]) == j]
print(a)
结果:
153
370
371
407
1
2
3
4
5
6
7
8
9
153
370
371
407
1634
8208
9474
54748
92727
93084
548834
1741725
4210818
9800817
9926315
[1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, 54748, 92727, 93084]