【发布时间】:2016-03-24 10:35:31
【问题描述】:
问题是:
145 是一个奇怪的数字,因为 1! + 4! + 5! = 1 + 24 + 120 = 145。
求所有数字的和等于其数字的阶乘之和。
注意:如 1! = 1 和 2! = 2 不是它们不包括在内的总和。
# Project Euler Problem 34
def factorial(num):
"""Factorial"""
product = num
for i in range(2, num):
product *= i
return product
def check_sum(number):
list_digits = list(str(number))
check_sum = 0
for digit in list_digits:
check_sum += factorial(int(digit))
if check_sum == number:
return True
def find_final_sum():
"""Find the sum of all the numbers."""
final_list = []
final_sum = 0
counter = 3
while counter < 200000:
if check_sum(counter):
final_list.append(counter)
counter += 1
else:
counter += 1
for j in final_list:
final_sum += j
print(final_sum)
find_final_sum()
我定义了一个函数来查找阶乘。 然后我定义了一个函数来检查一个数字是否等于其数字的阶乘之和。 最后,我检查从 3 到 200000 的数字。如果一个数字有效,我将其放入列表中。 最后,我将列表汇总并打印出来。
此代码仅给我 145 作为答案。我看不出我做错了什么,有人可以帮忙吗?
我并不是要发布欧拉问题的解决方案。
【问题讨论】:
-
你有一个变量和一个函数同名(final_sum)
-
好奇的数字是有限的。见Factorion: Upper Bound
-
欧拉计划的重点是不使用蛮力。
-
请注意,a)您可以将阶乘表(将 0-9 的阶乘计算到数字列表甚至字典中 -> int,b)提前退出
if check_sum > number,c)return check_sum == number; d) 使用for counter in range(3, 200000)
标签: python