题目详情
“水仙花数”的概念:指一个三位数,它的各个位上数字的立方和等于其本身,比如:153=1^3+5^3+3^3。
现在要求输出所有在 m 和 n 范围内的水仙花数
题目拓展
对于水仙花数来说是三位数,如果对于N多位数来说,那就是N位水仙花数了,那该如何去求解呢?
本次代码也主要是对N位水仙花数的展示
解题思路
对数字进行位数分离,存放在列表 list_i = [] ,
迭代列表的每个元素并对其求立方和,得出 sum
判断 sum 是否与该数相等,相等则添加至列表 list_daffodil = []
def daffodil(m, n):
list_daffodil = []
for j in range(m, n+1):
i = j
list_i = []
while i:#对m分别取出每一位数,放在 list_i 的列表里
list_i.append( i%10 )
i = int(i/10)
sum = 0#开始求立方和
for a in list_i:
sum = sum + pow(a, 3)
if j == sum:
list_daffodil.append( j )
return list_daffodil
运行结果
>>> daffodil(370, 375)
[370, 371]
>>> daffodil(370, 380)
[370, 371]
>>> daffodil(370, 3750)
[370, 371, 407]
>>> daffodil(100, 3750)
[153, 370, 371, 407]
>>> daffodil(100, 375000)
[153, 370, 371, 407]
>>>
对于后面的两组数据,结果虽然是一样的,但是在运行的时候,后者因为范围更大,数据更多,算出结果的时间明显增加了许多。
所以在想,在后面的知识积累后,是否有更高效的代替方法来实现相同的功能,现在的程序代码都在追求着速度,运行较慢的话应该会被淘汰。