Răspuns pe scurt
Pentru un număr natural n, n % 10 dă ultima cifră, iar împărțirea întreagă n / 10 o elimină. Repeți cele două operații până ai prelucrat toate cifrele; ordinea este de la dreapta la stânga.
Pentru un număr natural n, n % 10 dă ultima cifră, iar împărțirea întreagă n / 10 o elimină. Repeți cele două operații până ai prelucrat toate cifrele; ordinea este de la dreapta la stânga.
La 5070, prima cifră extrasă este 0. Nu este o eroare: ai început cu unitățile. Urmărește apoi ce rămâne din număr și vei vedea de ce ai nevoie de ambele operații.
5070 = 507 × 10 + 0
Aceeași împărțire îți oferă două informații: câtul întreg este 507, iar restul este 0. În C++, cu operanzi întregi, 5070 / 10 dă 507 și 5070 % 10 dă 0.
Regula este descrisă în secțiunea despre operatori din proiectul standardului C++. În acest tutorial de început pentru liceu lucrăm numai cu intrări valide: numere naturale între 0 și un miliard. Pentru numere cu parte zecimală sau pentru valori negative, nu extinde mecanic explicația.
O cifră citită, un număr mai scurt
Notăm cu m numărul pe care îl prelucrăm. La fiecare pas citim m % 10, apoi înlocuim m cu câtul întreg m / 10:
- 5070 → cifra 0, apoi m = 507;
- 507 → cifra 7, apoi m = 50;
- 50 → cifra 0, apoi m = 5;
- 5 → cifra 5, apoi m = 0.
Rezultatul afișat este 0 7 0 5. Cele două zerouri sunt prelucrate ca orice altă cifră. Programul nu afișează cifrele în ordinea inițială și nici nu construiește un număr nou din ele.
Program complet, inclusiv pentru intrarea 0
#include <iostream>
int main() {
unsigned long long n;
std::cin >> n;
unsigned long long m = n;
do {
unsigned int cifra = m % 10;
std::cout << cifra << ' ';
m /= 10;
} while (m != 0);
}
n păstrează valoarea citită, iar m este copia pe care o modificăm. m /= 10 înseamnă m = m / 10. Așa ajungem, la următorul pas, la unitățile numărului rămas.
Alegerea buclei contează la 0. Instrucțiunea do-while execută corpul înainte să verifice condiția. Programul afișează deci o cifră 0 și se oprește. Cu while (m != 0), corpul nu s-ar executa niciodată pentru această intrare.
Dacă pierzi cifre sau programul nu se oprește
Cu m %= 10 în loc de m /= 10, din 5070 rămâne imediat 0. Ai păstrat numai cifra unităților, deci nu mai ai din ce extrage celelalte cifre.
Dacă elimini cu totul actualizarea lui m, pentru o intrare pozitivă vei afișa aceeași cifră la nesfârșit. Uită-te la valoarea lui m după prima trecere: dacă nu s-a schimbat, ai găsit rândul de reparat.
Înainte de rulare, încearcă 406
Acoperă urmărirea de mai sus și scrie ce va afișa programul pentru 406. Notează și valorile succesive ale lui m.
Ar trebui să obții cifrele 6 0 4, iar m să treacă prin 406, 40, 4 și 0. Dacă ai scris 4, 0, 6, ai folosit ordinea de citire a numărului în locul ordinii de extragere.
Repetă această verificare fără rezolvarea în față cu alt număr. Pentru o explicație la clasă sau la un profesor de informatică, păstrează urmărirea ta: se vede exact după ce pas ai pierdut o cifră.