Ideea fundamentală
Orice prelucrare de cifre folosește perechea:
n % 10: ultima cifră;n / 10: numărul fără ultima cifră.
Repetăm până n devine 0.
Suma cifrelor
#include <iostream>
using namespace std;
int main() {
int n = 1234, s = 0;
while (n > 0) {
s = s + n % 10;
n = n / 10;
}
cout << s;
return 0;
}Pași: s=4, n=123; s=7, n=12; s=9, n=1; s=10, n=0. Se afișează 10.
Oglinditul (inversul) numărului
#include <iostream>
using namespace std;
int main() {
int n = 1234, ogl = 0;
while (n > 0) {
ogl = ogl * 10 + n % 10;
n = n / 10;
}
cout << ogl;
return 0;
}Pași: ogl=4; ogl=43; ogl=432; ogl=4321. Se afișează 4321.
Numărul de cifre
#include <iostream>
using namespace std;
int main() {
int n = 507, nr = 0;
while (n > 0) {
nr++;
n = n / 10;
}
cout << nr;
return 0;
}Rezultat: 3. Atenție: pentru n = 0 acest cod dă 0 cifre; cazul 0 se tratează separat.
Exemplu rezolvat
Ce afișează pentru n citit egal cu 906?
#include <iostream>
using namespace std;
int main() {
int n, s = 0;
cin >> n;
while (n > 0) {
if (n % 2 == 0) s += n % 10;
n /= 10;
}
cout << s;
return 0;
}se trimit programului la citire
Cifrele sunt 6, 0, 9. Condiția n % 2 == 0 testează paritatea numărului curent, care e mereu aceeași cu paritatea ultimei lui cifre (10 e par), deci programul adună cifrele pare: n=906 par → s+=6 (s=6), n=90 par → s+=0 (s=6), n=9 impar → nimic, n=0 stop. Se afișează 6.
Greșeli frecvente
- Confuzia dintre o proprietate a numărului și una a ultimei cifre: la paritate dau același rezultat (
n % 2e egal cun % 10 % 2, pentru că 10 e par), dar la alte împărțiri nu: pentru n = 25,n % 3e 1, iarn % 10 % 3e 2. - La oglindit, formula e
ogl * 10 + cifra, nuogl + cifra * 10. - Modificarea lui
nîn buclă îl distruge: dacă îți trebuie și la final, salvează-l într-o copie.