Cum funcționează
Problema are două părți independente: extragerea cifrelor și afișarea matricei. Prima e
tiparul standard pe care îl vei folosi în majoritatea problemelor cu cifre:
cat timp n > 0:
ultima cifra = n % 10
n = n / 10
n % 10 dă restul împărțirii la 10, adică exact ultima cifră. n / 10 e împărțire întreagă,
deci taie ultima cifră. Se repetă până nu mai rămâne nimic.
Capcana e că cifrele ies de la coadă spre cap: pentru 5698 obții pe rând 8, 9, 6, 5. De
aceea vectorul c se parcurge invers la afișare (i de la k - 1 la 0), ca să reconstitui
ordinea din număr.
Dimensiunea matricei nu e citită — e k, numărul de cifre, care rezultă din numărul însuși. Pentru
5698, k = 4, deci matricea e 4 × 4.
long long e folosit pentru că enunțul permite 9 cifre. Un int obișnuit ține până la
aproximativ 2,1 miliarde, deci ar merge și el la 9 cifre — dar long long te scutește de calculul
ăsta la fiecare problemă și nu costă nimic.
Greșeli frecvente
- Afișarea cifrelor în ordinea extragerii — iese matricea cu liniile răsturnate:
8 8 8 8 pe
primul rând. E cea mai frecventă greșeală la orice problemă cu cifre.
- Tratarea lui
n = 0 — while (n > 0) nu se execută niciodată, k rămâne 0 și nu se
afișează nimic. Enunțul nu interzice 0, deci se tratează separat.
c[i] în loc de c[k - 1 - i] când parcurgi crescător — aceeași greșeală, scrisă altfel.
Mai sigur e să mergi descrescător, ca în rezolvare.
- Folosirea lui
n după bucla while — a fost distrus de împărțirile repetate și valorează
0. Dacă ai nevoie de el mai târziu, păstrează o copie înainte.