Sunteți pe pagina 1din 6

Lecţia 6 – Prelucrare a cifrelor. CMMDC.

Platforma evaluare
Clasa a V-a

Algoritmi de prelucrare a cifrelor unui număr natural


Pentru prelucrarea cifrelor unui număr se recomandă utilizarea instrucțiunilor while sau do ...while

Reamintim
Instrucțiunea while are următoare sintaxă:
while (condiție) ;
{Instrucțiune;}
Observații:
1. dacă la prima evaluare a condiţiei aceasta este falsă, instrucțiunea/instrucţiunile nu se execută
2. dacă sunt două sau mai multe instrucţiuni care trebuie executate repetat în while, ele se vor încadra
între { }

Instrucțiunea do ... while are următoare sintaxă:


do
{Instrucțiune;}
while (condiție);
Observații:
1. instrucțiunea/instrucțiunile se execută cel puțin o dată indiferent dacă condiția este sau nu
îndeplinită.
2. acoladele sunt obligatorii doar dacă avem de executat mai mult de o instrucțiune
3. instrucțiunea se termină cu ”;”

ATENȚIE !!!!
Atunci când prelucrăm cifrele unui număr valoarea acestuia devine 0!!!
p=1;
while (n!=0) cât timp n este diferit de 0
{
uc=n%10;
n=n/10;
nr++;///p=p*uc;///ogl=ogl*10 + uc;
}
n ajunge 0

Algoritmi de prelucrare a cifrelor unui număr n (vezi lecția 6):

1. determinarea numărului de cifre


2. produsul cifrelor
3. construire oglindit (oglinditul unui număr este numărul citit de la dreapta la stânga)
4. verificare palindrom (un număr este palindrom dacă este egal cu oglinditul său, exemplu
121)
5. construire număr cu cifrele pare/impare ale lui n
a) folosind oglinditul numărului (nu funcționează pentru numere care se termină cu 0)
de exemplu oglinditul lui 12540 este 4521, dar numărul format din cifre pare este
240
b) construind numărul de la dreapta la stânga folosind puterile lui zece
6. determinarea cifrei minime/maxime din scrierea lui n
7. determinare prima cifră
while(n>9)
n=n/10;
8. determinare primele 2 cifre
while(n>99)
n=n/10;
Lecţia 6 – Prelucrare a cifrelor. CMMDC. Platforma evaluare
Clasa a V-a

Probleme propuse
1. Se citesc n (2<=n<=100) numere naturale, fiecare cu cel puțin 2 și cel mult 9 cifre. Să se afișeze
numărul care are prima cifră mai mare. Dacă există mai multe astfel de numere se afișează ultimul
număr citit.
Exemplu:
pentru n=5 și numerele 345 913 76 657 99, se afișează 99.

Soluție:
#include <iostream>
using namespace std;
int n,uc,a,copie,maxim,nrmaxim;
int main()
{
cin >> n;
for (int i=1; i<=n; i++)
{
cin >> a;
copie=a;
while (a>9)
a=a/10;
if (a>=maxim)
{
maxim=a;
nrmaxim=copie;
}
}
cout << nrmaxim;
return 0;
}
2. Se citește n număr natural cu cel puțin 4 și cel mult 15 cifre. Să se calculeze produsul primelor 3
cifre ale sale
Exemplu:
pentru n=6582194568, se afișează 240.

Soluție:
#include <iostream>
using namespace std;
int main()
{
long long int n,u,p=1;
cin>>n;
while (n>999)
n=n/10;
while(n!=0)
{
u=n%10;
p=p*u;
n=n/10;
}
cout<<p;
return 0;
}
Lecţia 6 – Prelucrare a cifrelor. CMMDC. Platforma evaluare
Clasa a V-a

3. Se citește n număr natural cu un număr impar de cifre, cel puțin 3 cel mult 17. Să se determine și
afișeze numărul format de cele 3 cifre din mijloc.
Exemplu:
pentru n=65821945685, se afișează 194

Soluție:
#include <iostream>
using namespace std;
long long int n,x,copie,nr,p,i;
int main()
{
cin>>n;
copie=n;
while (n!=0)
{
n=n/10;
x++;
}
nr=x/2-1;
p=1;
for (i=1; i<=nr; i++)
p=p*10;
cout<<copie/p%1000<<endl;
return 0;
}

Determinare CMMDC (Cel Mai Mare Divizor Comun)

Algoritmul lui Euclid:


1. Prin scăderi repetate care presupune scăderea din numărul cel mai mare a numărului cel mai mic
până când cele 2 numere devin egale
Implementare C++
#include <iostream>
using namespace std;
int a, b;
int main()
{
cin>>a>>b;
while (a!=b)
if(a>b)
a=a-b;
else
b=b-a;
cout<<a;
return 0;
}
Lecţia 6 – Prelucrare a cifrelor. CMMDC. Platforma evaluare
Clasa a V-a

2. Prin împărțiri repetate care presupune împărțirea în mod repetat a unuia dintre numere la celălalt
până obținem restul 0.
Implementare C++
#include <iostream>
using namespace std;
int a, b, r;
int main()
{
cin>>a>>b;
while (b!=0)
{
r=a%b;
a=b;
b=r;
}
cout<<a;
return 0;
}

Determinare CMMMC (Cel Mai Mic Multiplu Comun)


cmmmc (a,b) = (a*b)/cmmdc(a,b);

Implementare C++
#include <iostream>
using namespace std;
int a, b, r, cmmmc, p;
int main()
{
cin>>a>>b;
p = a*b;
while (b!=0)
{
r=a%b;
a=b;
b=r;
}
cmmmc = p / a;
cout<<cmmmc;
return 0;
}
Lecţia 6 – Prelucrare a cifrelor. CMMDC. Platforma evaluare
Clasa a V-a

Descompunerea în factori primi a numărului natural n:

număr prim = număr care are exact 2 divizori: 1 și numărul însuși.

Primul număr prim este 2, care este și singurul număr prim par!!

Teoria fundamentală a aritmeticii spune că orice număr întreg mai mare decât 1 poate fi scris ca produsul
unic a unu sau mai multe numere prime.

Divizorii primi ai unui număr natural n sunt cuprinși între 2 și n. Pentru a determina divizorii primi ai lui n
vom proceda astfel:
 parcurgem succesiv aceste numere (de la 2 la n) și pentru un divizor curent d al lui n:
o determinăm puterea sa în descompunere numărând de câte ori se poate împărții n la d.
Această împărțire se realizează efectiv.
o afișam divizorul curent d și puterea sa;
 procesul se încheie când n devine 1.

Implementare C++

Forma 1
#include <iostream>
using namespace std;
int n, d, p; ///n - numarul citit, d - divizorul, p - puterea divizorului
int main()
{
cin>>n;
d=2; ///primul divizor prim este 2
while(n>1)
{
p=0; ///puterea divizorului
while(n%d==0)
{
n=n/d;
p++;
}
if(p!=0)
cout<<d<<" la putere "<<p<<endl;
d++; ///trec la urmatorul divizor
}
return 0;
}
Forma 2
#include <iostream>
using namespace std;
int n, d, p; ///n - numarul citit, d - divizorul, p - puterea divizorului
int main()
{
cin>>n;
int p=0;
while(n%2==0) { n/=2; p++;}
if(p) cout<<2<<” |”<<p<<’\n’;
for(d=3; d*d<=n; d+=2)
if(n%d==0)
{ p=0;
Lecţia 6 – Prelucrare a cifrelor. CMMDC. Platforma evaluare
Clasa a V-a

while(n%p==0)
{n/=d; p++;}
if(p)
cout<<f<<” ”<<p<<’\n’;
}
if(n>1)
cout<<n<<” ”<<1;
}

TEMĂ
Rezolvați, de pe platforma indicată, următoarele probleme:
- http://pbinfo.ro: #2162, #2111, #1420, #2223, #121, #871,
#364, #3251, #1424, #3303, #411, #80,
#3271, #409, #410, #305, #378, #2305, #2566
- http://campion.edu.ro/arhiva: codcorect, triplu, case1, fazanr, alo

SUCCES!

S-ar putea să vă placă și