Za mały zakres typu całkowitego

0

Mam zrobić program liczący sumę cyfr n! z jak największą zmienną n. Użyłem zmiennej "int long long" i nie mam pomysłu co mogę jeszcze zrobić. To mój kod:

long long int sumOfFactorialDigits( unsigned short n )
{
    int sum=0;
    long long factorial=1;
   
    for(int counter=1; counter<=n;counter++)
    {
        factorial *=counter;
    }
    
    while(factorial>0)
    {
       sum+=factorial%10;
       factorial/=10;
    }
return sum;
}
1

Użyj jakiejś biblioteki do big integerów, np. Boost.Multiprecision.

0

No to zostaje ci jeszcze "arytmetyka stringowa", czyli napisz funkcję która pomnoży 2 liczby podane jej jako string.

0

prawie gotowiec. Małe przeróbki i po problemie:
https://wandbox.org/permlink/cCFog6UJiSN7CA1C

2

Nie no nie róbcie sobie jaj, bo co kolejna sugestia to bardziej idiotyczna :D Tutaj trzeba włączyć myślenie a nie robić to "na pałe". Podpowiem że silnia bardzo szybko zaczyna kończyć się dużą liczbą zer, których mnożyć nie ma sensu...
Faktycznie można tu robić obliczenia "pisemne" jeśli chcesz dostać wyniki dla faktycznie dużych wartości, ale zalecam jednak to napisać samodzielnie żeby nie bawić się w mnożenie zer :)
Samo pomijanie 0 nawet w naiwnej implementacji dałoby ci silnie z 25 zamiast 20.

0

To: https://www.geeksforgeeks.org/find-sum-digits-factorial-number/ jest jakieś rozwiązanie, ale wygląda trochę jak brute force. Lepsze mnożenie (np. Karatsuba), przyspieszyło by znacznie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1