寻找水仙花数
水仙花数(Narcissistic number)是指一个 3 位数,它的每个位上的数字的 3 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。本题要求寻找所有的水仙花数。
返回值: 返回一个 list,包含了所寻找到的全部水仙花数的数值,要求这些数从小到大排列。每一个数都应当为整形,如[153, 370, 371]。
#coding: utf-8
#问题:列举所有的三位水仙花数
#答案:['153','370','371','407']
import time
#方法一:遍历100-999
def solution1():
start_time = time.time()
for i in range(1000):
result = []
for num in range(100,1000):
add = 0
num = str(num)
for i in num:
add += pow(int(i),3)
if add == int(num):
result.append(num)
print(result)
print(time.time()-start_time)
#计算1000次的时间:2.97917
#方法二:遍历1-9的3次方的和
def solution2():
start_time = time.time()
for i in range(1000):
result = []
for num1 in range(0,10):
pow1 = pow(num1,3)
for num2 in range(num1,10):
pow2 = pow(num2,3)
for num3 in range(num1,10):
pow3 = pow(num3,3)
add = pow1 + pow2 + pow3
if add in result:
continue
if len(str(add)) == 3:
add_list = list(str(add))
is_narc = True
for numx in (num1,num2,num3):
if str(numx) in add_list:#注意str(num)
add_list.remove(str(numx))#注意str(num)
else:
is_narc = False
break
if is_narc == True:
result.append(add)
result.sort()
print(result)
print(time.time() - start_time)
#计算1000次的时间:1.10706
if __name__ == '__main__':
solution2()