Я пытался решить это о факториалах, но это не дает правильный ответ - PullRequest
2 голосов
/ 27 февраля 2020

вот в чем вопрос: напишите код python, чтобы найти все целые числа меньше 50000, которые равны сумме факториалов их цифр. Как пример: число 7666 6 = 7! + 6! + 6! + 6! но 145 = 1! +4! +5!

примечание: я не могу использовать какую-либо конкретную c факториальную функцию.

мое решение:

import math
from numpy import *
for i in range(5):
    for j in range(10):
        for k in range(10):
            for l in range(10):
                for m in range(10):
                    x=1*m+10*l+100*k+1000*j+10000*i
                    def fact(m):
                        fact=1
                        for i in range(1,m+1):
                            fact=fact*i
                        return fact
                    y=fact(i)+fact(j)+fact(k)+fact(l)+fact(m)
                    if x==y :
                        print(x)

1 Ответ

0 голосов
/ 27 февраля 2020

Подсказка 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.

...