[C++] Wczytywanie dlugiej liczby do tablicy

Hej!

Chcę wczytać załóżmy 200 znakową liczbe do tablicy i nastepnie wykonac na niej pewne operacje. Mam taki kod:

#include 

int main() {

    char aNumber1[200];

    char aNumber2[200];

    int e = 0;

    int f = 0;

    int temp;

    char c;

    //wczytywanie liczb

    printf("Podaj pierwsza liczbe:");

    for(scanf("%c", &c); c!='\n'; scanf("%c", &c))

        aNumber1[e++]=c; //probowalem rzutowac tu na int

    printf("Podaj druga liczbe:");

    for(scanf("%c", &c); c!='\n'; scanf("%c", &c))

        aNumber2[f++]=c;


    for (int i=e-1;i>=0;i--) {

        temp = aNumber1[i] + aNumber2[i];

        printf("%d - %c\n",i,temp);

    }

    printf("-----\n%c\n",aNumber1[0]);


}

Liczby są dobrze zapisane do tablicy lecz wykonanie na nich operacji konczy sie wypisaniem liter :smiley: (przynajmniej w moim przypadku). Jak sobie z tym poradzic?

Prosze o pomoc i pozdrawiam

Każdy wbudowany typ liczbowy ma limity. Liczby zapisywane są na 1, 2, 4 lub 8 bajtach. Maksymalna wartość, jaką można zapisać na k bajtach zmiennej bez znaku to 2^(8*k) - 1, czyli dla 8 bajtów (unsigned long long) to 18446744073709551615. Jak widać liczba ma raptem 20 znaków. Aby wykonywać operacje na liczbach, które w systemie dziesiętnym mają ponad 20 znaków potrzebujesz nowego typu i definicji operacji na nim (±*/). Jeśli się nie mylę proponowany dla C++ Decimal128 będzie wciąż za mały, więc jesteś skazany na własną implementację (albo bibliotekę 3rd party).

Jeśli nie zależy Ci na wysokiej precyzji wyniku, w pewnym zakresie możesz użyć liczb zmiennoprzecinkowych. Niestety float pozwala na zapis liczb do około 3*10^38, więc też jest za mały. Double jest większy: ~2*10^308. Przypominam jednak, że poświęcasz precyzję.

No wiem właśnie że każdy typ ma ograniczenia dlatego właśnie chcę zapisać wszystkie cyfry do tablicy (i bede miec ograniczenie do 200 cyfr co mnie satysfakcjonuje). Tylko jak to zrobić?

Ten fragment kodu trzeba przerobić cały, ja jedynie poprawiłem najbardziej groźne błędy.

#include int main()  {   char aNumber1[200],aNumber2[200],aNumber3[201],c;   int e=0,f=0,g=0,p=0;

Działa :smiley: Dzięki wielkie!

Są dwa problemy. Pierwszy: reprezentowanie liczb w ten sposób nie jest zbyt efektywne. Drugi: jak chcesz na tych liczbach wykonywać operacje bardziej złożone niż ich wyświetlanie, dodawanie i odejmowanie - ilość kodu do obsługi wzrośnie Ci lawinowo. (z drugiej strony fajnie czasem zaimplementować mnożenie pod kreskę…)