Prelucrarea cifrelor unui număr
Ideile de bază pe scurt și, unde există, exercițiile din subiectele de BAC care le verifică. Lecția completă, animată, cu grile și exerciții corectate, e în aplicația Tomomi.
Pe scurt
Sintaxă: extragerea cifrelor (mod / div 10)
Bucla care vizitează toate cifrele unui număr, de la dreapta la stânga:
cât timp n > 0 execută
c ← n mod 10
n ← n div 10
■while (n > 0) {
int c = n % 10;
n = n / 10;
}Idee: ultima cifră iese prima
Bucla de extragere prelucrează cifrele în ordine inversă față de scrierea numărului: prima cifră extrasă din 752 este 2. De aceea oglinditul se construiește natural, dar afișarea cifrelor în ordinea originală cere altă abordare.
Șablon: oglinditul unui număr
Construiește în o numărul cu cifrele inversate:
o ← 0
cât timp n > 0 execută
o ← o * 10 + n mod 10
n ← n div 10
■int o = 0;
while (n > 0) {
o = o * 10 + n % 10;
n = n / 10;
}Capcana: bucla distruge n
După bucla de extragere, n este 0: fiecare n / 10 a tăiat câte o cifră. Dacă valoarea inițială mai este necesară (de exemplu la comparația din palindrom), salvează o copie înainte de buclă:
int a = n;
while (a > 0) {
// prelucrează a, nu n
}Idee: palindrom = egal cu oglinditul
Un număr este palindrom exact când este egal cu oglinditul lui: 1221, 757, 8. Testul complet: copiază n, oglindește copia, compară cu originalul.
Capcana: zerourile dispar la capete
Oglinditul lui 120 este 21, nu 021: zeroul extras primul lasă o = 0, care nu afișează nimic în față. În schimb zerourile din mijloc se păstrează: oglinditul lui 806 este 608.
Din subiectele de BAC
Exerciții reale din subiectele anilor trecuți. Încearcă-le singur înainte să deschizi rezolvarea.
Algoritmul următor este reprezentat în pseudocod. S-a notat cu a%b restul împărțirii numărului natural a la numărul natural nenul b, și cu [c] partea întreagă a numărului real c.
citește x (număr natural)
p ← 1; m ← -1
┌cât timp p≤x execută
│ c ← [x/p]%10
│┌dacă c>m atunci
││ m ← c; p ← p*10
││altfel
││ x ← [x/(p*10)]*p+x%p
│└■
└■
┌dacă m≥0 atunci scrie x
│ altfel scrie "nul"
└■Scrieți valoarea afișată dacă se citește numărul 6907512.
Vezi rezolvarea
Algoritmul parcurge cifrele de la unități spre stânga; p indică poziția curentă, iar m reține cea mai mare cifră întâlnită. Dacă cifra curentă c este strict mai mare decât m, este păstrată; altfel este eliminată din număr.
Trasare pentru :
- : se păstrează, ,
- : se elimină,
- : se păstrează, ,
- : se păstrează, ,
- : se elimină,
- : se păstrează, ,
- : se elimină,
- : bucla se oprește
Cum , se afișează 9752.