You are on page 1of 5

Clasa a IX-a A, E

XI. Algoritmi pentru prelucrarea cifrelor unui numr

1. Prezentare general
Pentru prelucrarea cifrelor unui numr n se extrag pe rnd cifrele acestuia. ntotdeauna cifra
extras va fi cifra cea mai nesemnificativ (ultima cifr), cu operaia n%10. Dup extragerea ultimei
cifre, aceasta se prelucreaz, apoi, aceast cifr, se elimin din numrul iniial. Algoritmul continu
pn cnd numrul mai are cifre (n!=0).

while (n!=0) //ct timp numrul mai are cifre execut


{
uc = n % 10; //extrage ultima cifr
//prelucreaz ultima cifr
n= n/10 //elimin ultima cifr
}

2. Probleme rezolvate
2.1. S se afieze cifrele unui numr citit de la tastatur.
Exemplu: dac se citete n = 8275 se va afia 5 7 2 8.
Rezolvare: n acest caz prelucrarea nseamn afiarea ultimei cifre. Datele necesare sunt
urmtoarele: n numrul citit, uc variabila n care pstrm ultima cifr.
#include <iostream>

using namespace std;

int n,uc;

int main()
{
cout << "n="; cin>>n; //citesc n
while(n!=0) //cat timp numarul are cifre
{
uc = n % 10; //calculez ultima cifra
cout<<uc<<\n; //afisez cifra si trec la rand nou
n = n / 10; //elimin ultima cifra
}
return 0;
}

2.2. Se citete un numr natural n. S se calculeze suma cifrelor numarului.


Exemplu: pentru n = 8275 se afieaz 22.

1
Clasa a IX-a A, E

Explicaie: n acest caz prelucrarea cifrelor nseamn calculul unei sume. De fiecare dat dup ce
obinem cifra aceasta o adunm la sum.
#include <iostream>

using namespace std;

int n,uc;

int main()
{
cout << "n="; cin>>n; //citesc n
s = 0;//suma se iniializeaz cu 0, adic vom ncepe calculul sumei de la 0
while(n!=0) //cat timp numrul are cifre
{
uc = .; //calculez ultima cifra
s = s + uc; //adun cifra obinut la sum
n = ; //elimin ultima cifra
}
cout<<s; //afisez suma
return 0;
}

2.3. S se afieze inversul (rsturnatul unui numr citit de la tastatur. Ex: pentru n=43961 se va
afia 16934.
Rezolvare: Fie n numrul iniial i variabila inv cea care reine inversul numrului n. La fiecare pas
ultima cifr trebuie adugat la sfritul numrului.
n uc inv
0
43961 1 1=0*10+1

4396 6 16=1*10+6
439 9 169=16*10+9

43 3 1693=169*10+3
4 4 16934=1693*10+4
0

La fiecare pas inversul se calculeaz ca inv = inv*10 + uc;

2
Clasa a IX-a A, E

#include <iostream>

using namespace std;

int n,uc, inv;

int main()
{
cout << "n="; cin>>n; //citesc n
inv = 0;//initial nu am nicio cifra adaugata
while(..) //cat timp numrul are
cifre
{
uc = .; //calculez ultima cifra
inv = inv * 10 + uc; //adaug cifra la sfarsitul
numarului n = ; //elimin ultima cifra
}
cout<<inv; //afisez inversul
return 0;
}

2.4. Se citete un numr ntreg n. S se formeze un nou numr care conine numai cifrele pare ale
numrului iniial. Exemplu: pentru n=27455 se va forma numrul 24.
Rezolvare: Se prelucreaz ultima cifr. Dac aceasta este par se va aduga n noul numr pe
poziia cea mai semnificativ (la nceputul numrului). Astfel, o variabil p va reine pe care poziie
din numr se adaug cifra extras (a unitilor p=1, a zecilor p=10, a sutelor p=100 etc).
#include <iostream>
using namespace std;
int n,uc, nr, p;
int main()
{
; //citesc n
p = 1; //prima cifra para o pun pe pozitia unitatilor
nr = 0;//initial nu am nicio cifra adaugata
while(..) //cat timp numrul are cifre
{
uc = .; //calculez ultima cifra
if( ) //daca ultima cifra e para
{
nr = uc*p + nr; //adaug cifra pe pozitia corespunzatoare
}
n = ; //elimin ultima cifra
}
cout<<nr; //afisez numarul format din cifrele
pare return 0;
}

3
Clasa a IX-a A, E

2.5. Se citete un numr ntreg n. S se calculeze i s se afieze cea mai mare cifr a sa.
Exemplu:
pentru n=27455 se va afia 7.
Explicaie: atunci cnd trebuie s calculm o valoare maxim valoarea iniial a acesteia trebuie
s fie foarte mic. Prin urmare vom utiliza o variabil maxim a crei valoare iniial va fi -1 (o
valoare mai mic dect cea mai mic cifr posibil). Vom prelucra cifrele numrului i dac gsim
o valoare mai mare dect maximul, valoarea maxim va deveni acea cifr.
#include <iostream>
using namespace std;
int n,uc, maxim;
int main()
{
; //citesc n
maxim = -1;//initial maximul are o valoare foarte mic
while(..) //cat timp numrul are cifre
{
uc = .; //calculez ultima cifra
if( maxim < uc) //daca ultima cifra e mai mare ca
//maximul
{//pot lipsi acoladele
maxim = uc; //retin noul maxim
}
n = ; //elimin ultima cifra
}
cout<<maxim;//afisez cifra de valoare
maxim
return 0;
}

3.Probleme propuse
3.1. Se citete un numr ntreg n. S se calculeze i s se afieze cea mai mic cifr a sa.
Exemplu:
pentru n=274155 se va afia 1.
Explicaie: atunci cnd trebuie s calculm o valoare maxim valoarea iniial a acesteia trebuie
s fie foarte mare, mai mare dect cea mai mare cifr posibil. Prelucrm cifrele numrului i dac
gsim o valoare mai mic dect minimul de pn atunci reinem aceast cifr.
3.2. Se citete un numr natural n. S se calculeze i s se afieze numrul de cifre ale numrului.
Exemplu: pentru n=274155 se va afia 6 (numrul are 6 cifre).
Explicaie: o variabil nr va numra numrul de cifre ale numrului. Numrtoarea ncepe de la 0,
prin urmare valoarea iniial a variabilei nr va fi 0. Se prelucreaz cifrele numrului i de fiecare

4
Clasa a IX-a A, E

dat cnd se calculeaz ultima cifr numrul de cifrea ale numrului crete cu 1 (valoare
variabilei nr crete cu 1). Dup prelucrarea cifrelor se afieaz valoarea variabilei nr.

3.3. Se citete un numr n. S se verifice dac acesta este palindrom i s se afieze mesajul
PALINDROM dac numrul e alindrome i NU E PALINDROM n caz contrar. Un numr
e palindrom dac e egal cu inversul (rsturnatul su).
Exemplu: dac se citete n = 1221 se va afia PALINDROM, iar dac se citete n = 653 se va
afia NU E PALINDROM.
Explicaie: se calculeaz inversul (oglinditul) unui numr. Dar atenie: ne trebuie att valoarea
iniial ct i inversul numrului. Dar dac prelucrm cifrele numrului, acesta ajunge la 0. De
aceea nainte de a ncepe s prelucrm cifrele reinem valoare lui n ntr-o variabil auxiliar (s
zicem aux). Dup ce am calculat inversul comparm valoarea acestuia cu aux. Dac valorile
sunt egale se afieaz mesajul precizat, n caz contrar cellalt mesaj.

3.4. Se citete un numr ntreg n. S se calculeze produsul cifrelor nenule. Exemplu: dac se
citete n = 3054 se va afia 60.
Explicaie: Valoarea iniial a produsului va fi 1. Se prelucreaz pe rnd cifrele numrului i
dac cifra e nenul (diferit de 0) aceasta se nmulete cu produsul.

3.5. Se citete un numr natural n. S se calculeze suma cifrelor impare. Exemplu: dac se
citete n = 65094 se va afia 14.
Explicaie: Valoarea iniial a sumei va fi 0. Se prelucreaz pe rnd cifrele numrului i dac
cifra e impar aceasta se adun la sum.

3.6. Se citete un numr natural n. S se formeze un numr format numai din cifrele impare ale
lui n. Exemplu: dac se citete n = 65094 se va afia 59.
Explicaie: se prelucreaz cifrele numrului. Dac o cifr este impar aceasta se adaug pe
poziia corespunztoare (prima cifr pe poziia unitilor, a doua pe poziia zecilor, a treia pe
poziia sutelor, etc).