题目描述
输山不大于n的所有“水仙花数”。所谓 “水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
回答如下,记得采纳一下哦!
def func():
for num in range(100, n+1):
# 获取百位、十位、个位数字
hundreds = num // 100
tens = (num //10) %10
ones = num % 10
# 判断是否为水仙花数
if num == hundreds**3 + tens**3 + ones**3:
print(num)
n = int(input("请输入一个正整数n: "))
if n<100 or n>999:
print("输入错误")
else:
func(n)
1# 方法一
2start = 101
3end = 999
4for i in range(start, end + 1):
5 # 计算百位上的数
6 bai = i // 100
7 # 计算十位、个位上的数
8 shi, ge = (i - bai * 100) // 10, i % 10
9 # 判断是否为水仙花数
10 if ge ** len(str(i)) + shi ** len(str(i)) + bai ** len(str(i)) == i:
11 print(i)
上面算法只能计算三位的水仙花数,该算法只需要使用单层循环,并通过数学整除、求余来计算百位、十位、个位上的数,然后判断该数是否为水仙花数。
总结来说,这个算法简单、易懂、适合初学者上手学习,而且这个算法只需要单层循环;这个算法最大的问题是不适合计算多位的“自幂数”。
下面对这个方法略作改进。