# Prelucrarea cifrelor unui număr

> Pagina: https://bacalaurescu.ro/informatica/lectii/algoritmi-fundamentali/cifrele-unui-numar
> Markdown: https://bacalaurescu.ro/informatica/lectii/algoritmi-fundamentali/cifrele-unui-numar.md
> Sursa: Bacalaurescu (bacalaurescu.ro), conținut gratuit pentru BAC 2027.

Materia: [Informatică](https://bacalaurescu.ro/informatica)

Capitolul: [Algoritmi fundamentali](https://bacalaurescu.ro/informatica/lectii/algoritmi-fundamentali)
Actualizat: 2026-11-01

Extragerea cifrelor cu % și /, suma cifrelor, oglinditul și numărul de cifre.

## Pe scurt pentru BAC

- Suma cifrelor se obține adunând `n % 10` la `s` și tăind cifra cu `n = n / 10`, cât timp `n > 0`.
- Numărul de cifre se află crescând un contor la fiecare împărțire la 10, de exemplu 507 are 3 cifre.
- Pentru `n = 1234`, suma cifrelor este 10, iar oglinditul este 4321.

## Ideea fundamentală

Orice prelucrare de cifre folosește perechea:

1. `n % 10`: ultima cifră;
2. `n / 10`: numărul fără ultima cifră.

Repetăm până `n` devine 0.

## Suma cifrelor

~~~cpp
int n = 1234, s = 0;
while (n > 0) {
    s = s + n % 10;
    n = n / 10;
}
cout << s;
~~~

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

~~~cpp
int n = 1234, ogl = 0;
while (n > 0) {
    ogl = ogl * 10 + n % 10;
    n = n / 10;
}
cout << ogl;
~~~

Pași: ogl=4; ogl=43; ogl=432; ogl=4321. Se afișează `4321`.

## Numărul de cifre

~~~cpp
int n = 507, nr = 0;
while (n > 0) {
    nr++;
    n = n / 10;
}
~~~

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?

~~~cpp
int n, s = 0;
cin >> n;
while (n > 0) {
    if (n % 2 == 0) s += n % 10;
    n /= 10;
}
cout << s;
~~~

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`.

> [!RETINE]
> `n % 10` dă ultima cifră, `n / 10` taie ultima cifră; repeți până `n` devine 0. Oglinditul se construiește cu `ogl = ogl * 10 + n % 10`. Pentru `n = 0` bucla nu se execută deloc, deci cazul 0 se tratează separat; dacă ai nevoie de `n` după buclă, lucrează pe o copie.

## Greșeli frecvente

1. Confuzia dintre o proprietate a numărului și una a ultimei cifre: la paritate dau același rezultat (`n % 2` e egal cu `n % 10 % 2`, pentru că 10 e par), dar la alte împărțiri nu: pentru n = 25, `n % 3` e 1, iar `n % 10 % 3` e 2.
2. La oglindit, formula e `ogl * 10 + cifra`, nu `ogl + cifra * 10`.
3. Modificarea lui `n` în buclă îl distruge: dacă îți trebuie și la final, salvează-l într-o copie.
