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

cpp, suma cyfr w liczbie

Object Storage Arubacloud
0 głosów
998 wizyt
pytanie zadane 8 maja 2021 w C i C++ przez fsfxvcxv Obywatel (1,160 p.)

Witam, mam pytanie, jak dokladnie dziala ten kod, ktory wyznacza sume cyfr  w liczbie?

while (liczba > 0)
{
wynik += liczba%10;
liczba /= 10;
}

 

2 odpowiedzi

+3 głosów
odpowiedź 8 maja 2021 przez SzkolnyAdmin Szeryf (86,360 p.)
Zmienna wynik jest typu int i przechowuje sumę cyfr. Przed pętla nadaj jej wartość 0 (zero).

Zmienna liczb jest typu int i przechowuje liczbę dodatnią, której sumę cyfr wyznaczasz.

Pętla działa dopóki zmienna liczba jest dodatnia.

W linii 3 zmienną wynik powiększasz o resztę z dzielenia liczby przez 10, czyli o liczbę będącą cyfrą stojącą na ostatnim miejscu liczby.

W linii 4 dzielisz liczbę przez 10, a ponieważ jest ona typu int, następuje "obcięcie" ostatniej cyfry.

Wracasz do warunku pętli.

Przykład: liczba = 123, wynik = 0

Warunek spełniony (123>0) -> 1 obrót pętli: wynik = 0 + 123%10 = 0 + 3 = 3; liczba = 123/10 = 12.

Warunek spełniony (12>0) -> 2 obrót pętli: wynik = 3 + 12%10 = 3 + 2 = 5; liczba = 12/10 = 1.

Warunek spełniony (1>0) -> 3 obrót pętli: wynik = 5 + 1%10 = 5 + 1 = 6; liczba = 1/10 = 0.

Warunek nie spełniony (! (0>0)) -> dalsza część programu.
+2 głosów
odpowiedź 8 maja 2021 przez NewEraOfPeace Gaduła (4,790 p.)

Pętla działa dopóki liczba jest większa od 0 (dlaczego, do tego przejdziemy zaraz)
dzielenie liczby całkowitej w C++ odrzuca część ułamkową, czyli
 

int i = 123;
i / 10 == 12 (powinno być 12.3, ale odrzucamy część ułamkową, pracujemy z liczbami całkowitymi)

z kolei modulo z liczby zwraca resztę z dzielenia całkowitego, czyli:
 

int i = 20;

i % 6 == 2 (tak, bo 20/6 = 3 [zmieścimy 18] i 2 reszty)

jednak jest taka fajna właściwość, że jeśli mamy liczbę w systemie X i zrobimy modulo X, to dostaniemy ostatnią cyfrę:
 

int i = 123;
i % 10 == 3 (tak, bo zmieścimy 120, 3 reszty)

no więc mamy zadeklarowaną pewwną zmienną wynik, do której będziemy zapisywać sumę cyfr i wygląda to tak:

while (liczba > 0) // dopóki liczba jest większa od 0
{
wynik += liczba%10; // dodaj do zmiennej wynik ostatnią cyfrę
liczba /= 10; // podziel liczbę całkowicie przez 10
}

dla liczby 123 wygląda to następująco:
 

liczba = 123

wynik += liczba%10 // 3
liczba /= 10 // 12

wynik += liczba%10 // 2
liczba /= 10 // 1

wynik += liczba%10 // 1
liczba /= 10 // 0, bo zostało nam 1, 1/10 to 0.1, ale odrzucamy część ułamkową


 

Podobne pytania

0 głosów
0 odpowiedzi 130 wizyt
pytanie zadane 30 marca 2020 w C i C++ przez Golden123 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 255 wizyt
pytanie zadane 8 października 2022 w Python przez Ichbinda Nowicjusz (230 p.)
+1 głos
1 odpowiedź 399 wizyt

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...