analiza operacji na znakach

0

Witam, mógłby ktoś mi pomóc przeanalizować część tego kodu ?.

        for (int i = 0; i < liczba.length(); i++){
            wynik = wynik*10 + liczba[i]-'0';
            wynik = wynik%13; 

Dokładnie chodzi o drugą linijkę, wynik zostaje pomnożony przez 10 a potem dodaje jaką wartość i dlaczego odejmuje zero, zmienna liczba jest typu string.

0

Ten kod zmienia liczbę ze stringa do normalnej liczby. Każdy znak w stringu ma swój liczbowy odpowiednik w ascii, np. znak
'a' ma "wartość" 97
'0' ma "wartość" 48
'1' ma 49
itd
Więc żeby ze znaku '1' zrobić liczbę 1 musimy odjąć od niego '0' bo 49 - 48 = 1
Żeby teraz odczytać calą liczbę musimy "przesuwać" sobie kolejne dziesiątki. Załóżmy że mamy liczba = "123"
Bierzemy w pętli '1' i wyliczamy że wynosi to 1, dodajemy do wyniku
Bierzemy w pętli '2' i wyliczamy że wynosi to 2, teraz mnożymy to co już mamy (czyli 1) przez 10 i dodajemy nową liczbę, ergo mamy 12
Bierzemy w pętli '3' i wyliczamy że wynosi to 3, teraz mnożymy to co już mamy (czyli 12) przez 10 i dodajemy nową liczbę, ergo mamy 123

0

liczba to może string, ale liczba[i] to już jeden znak. Czyli inaczej mówiąc liczba, kod ASCII danego znaku. Odjęcie '0', czyli tak naprawdę liczby 48. Jak możesz zauważyć w tabeli znaków ASCII (http://www.asciitable.com/index/asciifull.gif) spowoduje to zamianę kodu ASCII cyfry na jej wartość liczbową.

0

Dzięki Panowie, teraz kumam :D

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