Descompunerea unui număr în cifre
În programare, lucrăm foarte des cu numere.
Uneori însă, nu este suficient să știm valoarea unui număr ca
întreg, ci avem nevoie să lucrăm separat cu cifrele
lui.
De exemplu:
- să aflăm ultima cifră a unui număr;
- să calculăm suma cifrelor;
- să verificăm dacă un număr este palindrom;
- să numărăm câte cifre are un număr.
Pentru toate aceste situații, avem nevoie de descompunerea unui număr în cifre.
Ce înseamnă descompunerea în cifre?
Un număr este format din cifre.
De exemplu:
- numărul
345este format din cifrele3,4și5; - numărul
1024este format din cifrele1,0,2și4.
Descompunerea în cifre înseamnă să separăm aceste cifre una câte una, folosind operații matematice simple.
Operații esențiale
Pentru a descompune un număr în cifre, folosim două operații foarte importante:
Împărțirea întreagă
/ 10
Aceasta ne ajută să „tăiem” ultima cifră a unui număr.
Exemplu:
123 / 10 = 12Restul împărțirii
% 10
Aceasta ne spune ultima cifră a numărului.
Exemplu:
123 % 10 = 3Ideea de bază
Pentru un număr
n:
n % 10→ ultima cifră;n / 10→ numărul fără ultima cifră.Folosind aceste două operații în mod repetat, putem obține toate cifrele unui număr.
Un prim exemplu simplu
int n = 347;
cout << n % 10 << endl; // 7
n = n / 10; // 347 -> 34
cout << n % 10 << endl; // 4
n = n / 10; // 34 -> 3
cout << n % 10 << endl; // 3Observăm că cifrele apar de la dreapta la stânga.
Descompunerea
unui număr folosind while
int n = 528;
while (n > 0) {
int cifra = n % 10;
cout << cifra << endl;
n = n / 10;
}Ce face acest program:
- extrage ultima cifră;
- o afișează;
- elimină cifra din număr;
- repetă pașii până când numărul devine 0.
Suma cifrelor unui număr
int n = 345;
int suma = 0;
while (n > 0) {
suma = suma + n % 10;
n = n / 10;
}
cout << suma;Output:
12Numărul de cifre ale unui număr
int n = 9021;
int cnt = 0;
while (n > 0) {
cnt++;
n = n / 10;
}
cout << cnt;Output:
4Cum aflăm
primele k cifre ale unui număr
Pentru a afla primele k cifre
ale unui număr n, vom elimina, pe rând,
cifrele de la final, până când numărul rămâne
cu exact k cifre.
De exemplu, pentru a afla primele 3 cifre
ale numărului n = 27623, putem folosi următorul
algoritm:
int n = 27623;
while (n > 999) {
n = n / 10;
}
cout << n;Output:
276Ce face programul?
1. Stabilim limita
Pentru k = 3, cel mai mare număr cu
3 cifre este 999. Atât timp cât
n este mai mare decât 999, înseamnă că
are mai mult de 3 cifre.
2. Verificăm numărul de cifre
Programul verifică dacă n > 999.
3. Eliminăm ultima cifră
Dacă condiția este adevărată, împărțim numărul la
10. Astfel, n „pierde” ultima
cifră.
4. Repetăm pașii
Verificarea se face din nou, până când n rămâne
cu exact k cifre.
5. Afișăm rezultatul
La final, n conține primele k cifre ale
numărului inițial.
De reținut
Pentru
kcifre, limita este cel mai mare număr cukcifre (9, 99, 999, 9999 etc.).
Operația
/ 10elimină ultima cifră a unui număr.
Algoritmul funcționează pentru orice valoare a lui
k.
Hint: pentru a afla limita lui
n putem calcula 10k - 1
Greșeli frecvente
1. Uitarea modificării lui
n
while (n > 0) {
cout << n % 10;
// lipseste n = n / 10;
}Aceasta duce la buclă infinită.
2. Cazul n = 0
Numărul 0 are o singură cifră,
dar bucla while (n > 0) nu se execută. Acest caz
trebuie tratat separat, dacă este necesar.
O altă variantă mai ușoară de a aborda acest caz, este de a folosi instrucțiunea
do-while
Cod exemplu
do-while
int n = 0;
int cnt = 0;
do {
cnt++;
n = n / 10;
}while (n > 0);
cout << cnt;Output:
1Când folosim descompunerea în cifre?
- la probleme cu sume de cifre;
- la verificări speciale;
- la exerciții de logică numerică;
- la probleme de concurs.
Ce să reții
- Un număr este format din cifre.
% 10ne dă ultima cifră./ 10elimină ultima cifră.- Cifrele apar de la dreapta la stânga.
- Trebuie tratat cu atenție cazul
n = 0. - Atenție la buclele infinite.