编写了一个查找强数的程序
如果一个数的阶乘和等于该数本身,则认为该数是强数。 145是1的强数!+4个!+5个!=145。在
需要接受一个列表,在列表中找到强数并返回相同的列表
我试过了:
def factorial(number):
if number == 0 or number == 1:
return 1
else :
return number * factorial(number - 1)
def find_strong_numbers(num_list):
sum = 0
ret_list = []
for i in num_list :
sum = 0
lst = list(map(int,list(str(i)))) #Converting the number into a list of numbers
for j in lst :
sum += factorial(j)
if sum == i :
ret_list.append(i)
return ret_list
num_list=[145,375,100,2,10]
strong_num_list=find_strong_numbers(num_list)
print(strong_num_list)
在上面的例子中,我创建了一个数字的数字列表,并找到了它的阶乘。 但是
^{pr2}$我在数字中创建了一个数字串列表 调用阶乘函数时将字符串转换为数字。 这对我来说似乎很有效,因为我不需要将其转换为map,然后再转换为int(较少的转换)
这是正确的,这是有效的比前一个,或有任何更好的优化代码比这找到强数。在
另一个版本,使用内置的
math.factorial
(doc):印刷品:
^{pr2}$您可以简单地记住
factorial
函数来加快处理速度同样,你可以用一个生成器来得到下一个数字
^{pr2}$这样可以避免创建断断续续的字符串列表。
注:这些都是一些小的优化,可能不会大大提高程序的性能。在
整体代码
因为您只使用0..9的阶乘,所以不需要使用函数来计算它们,更不用说递归的了。您只需硬编码所有10个值:
然后简单地使用:
^{pr2}$通过避免字符串转换,可以挤出更多的循环:
……但鉴于proven在
1, 2, 145, 40585
旁边没有这样的数字,整个企业看起来有点毫无意义;)相关问题 更多 >
编程相关推荐