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

cpp, suma cyfr w liczbie

VPS Starter Arubacloud
0 głosów
1,143 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 (88,580 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 146 wizyt
pytanie zadane 30 marca 2020 w C i C++ przez Golden123 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 363 wizyt
pytanie zadane 8 października 2022 w Python przez Ichbinda Nowicjusz (230 p.)
+1 głos
1 odpowiedź 443 wizyt

92,963 zapytań

141,928 odpowiedzi

321,161 komentarzy

62,297 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...