• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Dodawanie dużych liczb

0 głosów
310 wizyt
pytanie zadane 11 maja 2023 w C i C++ przez Janchess Początkujący (480 p.)
zamknięte 13 maja 2023 przez Janchess

Cześć

Napisałem funkcję, która ma za zadanie obliczyć sumę dwóch dużych liczb (stringów). Dla niektórych testów program się wysypuje i otrzymuje błąd "string subscript out of range". Gdzie leży błąd i co go powoduje ?

string add(string a, string b) {
    string wynik, temp;
    int da = a.size(), db = b.size(),w, przes=0;
    int mn = min(da, db), mx = max(da, db);
    
    for (int i = mx - 1; i > -1; i--) {
        
        if (da >= db) {
            
            if (mn--) {
                w = a[i] + b[mn] - 96 + przes;
            }

            else {
                w = a[i] - 48 + przes;
            }

            przes = w / 10;
            temp = w % 10 + 48;
            wynik = temp + wynik;

        }

        else {

            if (mn--) {
                w = a[mn] + b[i] - 96 + przes;
            }

            else {
                w = b[i] - 48 + przes;
            }

            przes = w / 10;
            temp = w % 10 + 48;
            wynik = temp + wynik;

        }

    }

    if (przes) {
        temp = przes + 48;
        wynik = temp + wynik;
    }

    return wynik;
}

 

 

komentarz zamknięcia: Uzyskałem odpowiedź na moje pytanie
komentarz 13 maja 2023 przez toko Dyskutant (8,030 p.)

tak na oko to ci wywala na wszystkich testach gdzie abs(a.size()-b.size())>1

komentarz 13 maja 2023 przez Janchess Początkujący (480 p.)
No właśnie dlaczego tak się dzieje ?
1
komentarz 13 maja 2023 przez toko Dyskutant (8,030 p.)
dobra, to tak na szybko jeden przypadek testowy:

a="111";
da = 3;
b="1";
db = 1;
mn = 1;

pierwsze przejście pętli:
    wchodzi w if(da>=db)
        wchodzi w if(mn--)
            mn = 0
            odwołuje się do b[0] -> OK
drugie przejście pętli:
    wchodzi w if(da>=db)
        wchodzi w else w if(mn--)
            mn = -1
            nie ma tu odwołania do b -> OK
trzecie przejście pętli:
    wchodzi w if(da>=db)
        wchodzi w if(mn--) // -1 to true
            mn = -2
           odwołuje się do b[-2] ----->>> ERROR
komentarz 13 maja 2023 przez Janchess Początkujący (480 p.)
Faktycznie, naprawiłem błąd i działa :) Dziękuje bardzo za pomoc.

Podobne pytania

0 głosów
1 odpowiedź 652 wizyt
pytanie zadane 15 października 2022 w C i C++ przez Eliasz Nowicjusz (200 p.)
0 głosów
0 odpowiedzi 476 wizyt
pytanie zadane 25 września 2021 w C i C++ przez Exequilas Nowicjusz (210 p.)
0 głosów
0 odpowiedzi 157 wizyt

93,425 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,785 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...