[C++] Mnożenie dużych liczb i wypisanie wyniku

Witam,

mam pewien problem z wynikiem mnożenia dużych liczb. Załóżmy, że mam dwie liczby całkowite dodatnie. Jedna to 123456789, a druga to 99999. Kiedy mnożę je przez siebie i zapisuję do zmiennej (przykładowo) wynik typu unsigned long long , a potem wyświetlam tą zmienną, to okazuje się, że wynik nie jest poprawny (poprawny wynik sprawdzam windowsowym kalkulatorem). W zależności co mnożę i do jakiego typu zmiennej zapisuję, wychodzą różne wyniki. Niekiedy ujemne! Czy ktoś wie dlaczego tak się dzieje? Używam Dev’aC++, ale nie sądzę, żeby to miało jakiś wpływ.

Wynik mnożenia zmieści się w unsigned long long(z tym, że kompilator może go domyślnie traktować jako _int_a, co w rezultacie da zły wynik), ale nie zmieści się w liczbach mniejszych. Jest to spowodowane tym, że nie da się go zapisać na 32 bitach(a co dopiero w liczbach mniejszych). Poczytaj sobie o tym, jak komputer przechowuje liczby, np. w tym artykule(a w szczególności rozdział Systemy liczbowe), a rozjaśni Ci się, o czym mówię.

Co w takim razie można zrobić, aby dobrze wyświetlić wynik? Na przykład taki kod:

#include 


int main()

{

    using namespace std;


    int liczba = 123456789;

    unsigned long long kwadrat = liczba * liczba;


    cout << kwadrat;


    return 0;

}

Wynik nie wyświetli się poprawnie. Co mam zrobić?

unsigned long long liczba = 123456789;

Tak teraz już wszystko działa. Bardzo dziękuję.