Подсказка 1
Причина, по которой это не дает правильного ответа, состоит в том, что в некоторых случаях ваш код считает 0
диа git.
Например, fact(0)+fact(0)+fact(1)+fact(4)+fact(5)
дает 147
, потому что fact(0)
- это 1
.
Подсказка 2
Хотя ваш способ итерации интересен и отчасти корректен, это источник вашей ошибки.
Попробуйте выполнить обычную итерацию от 1 до 50000, а затем по-разному вычислить сумму цифр.
for i in range(50000):
# ...
Решение
Поскольку это StackOverflow Я предлагаю решение сразу.
Используйте функцию, подобную этой, чтобы найти сумму цифр числа:
def fact(m):
fact=1
for i in range(1,m+1):
fact=fact*i
return fact
def sumOfFactOfDigits(x):
# This function only works on integers
assert type(x) == int
total = 0
# Repeat until x is 0
while x:
# Add last digit to total
total += fact(x%10)
# Remove last digit (always ends at 0, ie 123 -> 12 -> 1 -> 0)
x //= 10
return total
for i in range(50000):
if i == sumOfFactOfDigits(i):
print(i)
Примечание
Вы должны переместить определение fact
за пределами л oop.