Факториальная сумма цифр (без BigInt) C ++

0

Я пытаюсь выяснить, как решить эту проблему (Project Euler):

п! означает n × (n - 1) ×... × 3 × 2 × 1

Например, 10! = 10 × 9 ×... × 3 × 2 × 1 = 3628800, а сумма цифр в числе 10! 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.

Найдите сумму цифр в числе 100!

Использование BigInt не является вариантом, я пытаюсь понять, как реализовать решение, используя только c++.

Я подумал, что, возможно, разбивая большие числа на массив длиной около 7 цифр или что-то в этом роде, а потом справляюсь с ними, но я все еще не могу понять, как это сделать.

заранее спасибо!

Теги:
factorial

1 ответ

2
Лучший ответ

Попробуй это

#include "iostream"
#include "vector"

int n,remainder,sum;
int main ()
{   
    std::vector <int> digits(5000);    
    std::cin>>n;    
    digits[0]=1;
    digits[1]=1;
    for (int k=2;k<n+1;k++) {
        for (int i=1;i<=digits[0];i++) {
            digits[i]=digits[i]*k+remainder;
            remainder=0;
            if (digits[i]>9) {
                remainder=digits[i]/10;
                digits[i]%=10;
                if (i==digits[0])
                digits[0]++;
            }
        }
    }   
    for (int i=digits[0];i>=1;i--)
        sum+=digits[i];
    std::cout<<sum;
}
  • 0
    Несколько предложений: Использование using namespace std - плохая практика, используйте лучшие имена для переменных и определяйте переменные внутри for условия for (int k=2;k<n+1;k++)
  • 0
    @khajvah Это мой старый код для олимпиады :)
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню