PDA

View Full Version : [C++]Algoritmi cu cifre



~Wolf~
01-03-2020, 04:41 PM
Algoritmi cu cifre

NOTE!
-voi posta mai multi algoritmi in topicul acesta lasand reply-uri
-algoritmii nu ii voi posta neaparat zilnic
-in cazul oricarui fel de greseli/neintelegeri/corectari nu ezitati sa lasati un reply

Suma cifrelor unui numar natural
#include <iostream>
using namespace std;
unsigned int n,s; //declaram variabilele , n-numarul , s-suma; fiind globale ambele iau valoarea initiala 0
int main()
{
cin>>n; //citim numarul
while(n) //cat timp n este diferit de 0
{
s=s+n%10; //se creeaza suma cifrelor
n/=10; //"taiem" cifra pe care am adunat-o la suma: de ex pt 972 , va deveni 97, apoi 9 apoi 0(fiindca 9/10=0)
}
cout<<"Suma cifrelor numarului citit este: "<<s;//afisam suma
return 0;
}


Algoritm sume cifre pare/impare
#include <iostream>
using namespace std;
unsigned int n,s;
int main()
{
cin>>n;
while(n)
{
if((n%10)%2==0) //verificam paritatea numarului; ca sa va fie mai usor puteti declara o variabila c care sa ia valoarea n%10 si o puteti folosi in program
s=s+n%10;
/*
pentru cifre impare inlocuiti in if-ul de mai sus if((n%10)%2==1) sau if((n%10)%2!=0)
*/
n/=10;
}
cout<<"Suma cifrelor pare numarului citit este: "<<s;//afisam suma, alegeti voi daca sa fie cele pare sau impare si inlocuiti in text; eu am ales cele pare
return 0;
}


Cifra maxima
#include <iostream>
using namespace std;
unsigned int n,cmax; // declaram o variabila cmax care va fi initializata cu 0(declarare globala).Cu aceasta vom compara fiecare cifra a numarului n
int main()
{
cin>>n;
while(n)
{
if(n%10>cmax) // prima data cmax va lua valoarea unei cifre care este mai mare decat 0(fiindca se compara cu 0 initial), apoi se cauta cifra maxima
cmax=n%10; //cmax ia valoarea cifrei maxime
n/=10; //"taiem" cate o cifra a numarului
}
cout<<"Cifra maxima a numarului dat este: "<<cmax;
return 0;
}


Cifra minima
#include <iostream>
using namespace std;
unsigned int n,cmin; //declaram o variabila cmin care va lua valoarea primei cifre de la sfarsitul numarului
int main()
{
cin>>n;
cmin=n%10; //dam valoarea ultimei cifre a lui n, lui cmin;presupunem ca n=972 => cmin=2
n/=10; // n va deveni 97
while(n)
{
/*comparam ultima cifra a noului n(unde noul n=97) cu ultima cifra a numarului initial,
obtinandu-se, astfel, minimul.
-in cazul in care nu exista o cifra mai mica decat cmin , inseamna ca ultima cifra a numarului
este cea mai mica
*/
if(n%10<cmin)
cmin=n%10; //cmin ia valoarea cifrei minime
n/=10;
}
cout<<"Cifra minima a numarului dat este: "<<cmin;
return 0;
}

~Wolf~
02-03-2020, 08:26 PM
Numarul de cifre al unui numar
#include <iostream>
using namespace std;
unsigned int n,contor; //declaram o variabila n care va reprezenta numarul pe care il citim si variabila contor unde vom contoriza numarul cifrelor
int main()
{
cin>>n;
if(n<=9) //cazurile particulare cand n este o cifra
{
cout<<"Numarul dat are o singura cifra"; //afisam mesajul
return 0; //inchidem programul fiindca nu mai are niciun rost sa continuam cu ceilalti pasi
}
while(n)
{
contor++; //in cazul in care n are mai mult de o cifra, se executa structura while si se numara cifrele
n/=10; //se "taie" numarul
}
cout<<"Numarul dat are "<<contor<<" cifre"; //afisam numarul de cifre
return 0;
}



Cifra maxima a unui numar si numarul ei de aparitii
#include <iostream>
using namespace std;
unsigned int n,cmax,contor; // cmax=0, contor=0, unde cmax va fi cifra maxima, contor va fi numarul de aparitii
int main()
{
cin>>n;
if(n==0) // cazul particular cand n=0 se va afisa 1 fiindca exista doar o cifra maxima(0) care apare doar o data
contor=1;
while(n)
{
if(n%10>cmax) //comparam fiecare cifra; prima data se va compara cu 0, adica prima valoare a lui cmax va fi ultima cifra a numarului,apoi se va cauta cifra maxima
{
cmax=n%10; //in cazul in care s-a gasit o noua cifra maxima, cmax va lua valoarea ei, iar contorul se va reseta de la 0
contor=0;
}
if(n%10==cmax) //daca cifra maxima apare in numar, se contorizeaza
contor++;
n/=10; //"se taie" numarul
}
cout<<"Cifra maxima a acestui numar este "<<cmax<< "si apare de "<<contor<<" ori";
return 0;
}

~Wolf~
04-03-2020, 09:44 PM
Algoritm pentru afisarea numerelor rezultate in urma eliminarii unei cifre
#include <iostream>
using namespace std;
unsigned int n,m,i,cifre,zeci;
int main()
{
cin>>n;
m=n; //salvam valoarea lui n in m pentru a afla cate cifre are n
while(m)
{
cifre++; //numaram cifrele
m/=10;
}
zeci=1; //declaram o variabila care va efectua o ridicare la putere in structura for fara a folosi functia pow();
for(i=1;i<=cifre;i++) //de la 1 pana la cate cifre are numarul
{
m=n/(zeci*10)*zeci+n%zeci; //formula de eliminare a cifrei, atribuim numarul tot lui m ca sa nu mai folosim alta variabila(m a ramas 0 dupa acel while)
zeci*=10; //facem ridicarea la putere~ pt i=1, zeci=10, pt i=2, zeci=100, pt i=3, zeci=1000 s.a.m.d
cout<<m<<' '; //afisam numerele
}
return 0;
}


Ex: pentru n=2107 se va afisa
210 217 207 107

Explicatie:
-210 dupa eliminarea cifrei 7
-217 dupa eliminarea cifrei 0
-207 dupa eliminarea cifrei 1
-107 dupa eliminarea cifrei 2


Numarul de aparitii al cifrei k in numarul n

#include <iostream>
using namespace std;
unsigned int n,k,nrap;
int main()
{
cin>>n>>k;
while(n)
{
if(n%10==k) // verificam daca ultima cifra a numarului curent este egala cu k
nrap++; //daca da, numaram aparitia
n/=10;
}
cout<<nrap;
return 0;
}

Algoritm de schimbare a primei cifre cu ultima cifra a unui numar
#include <iostream>
using namespace std;
//declaram un m care va fi inlocuitorul lui n, si o variabila care va memora ultima cifra
//variabila putere o vom folosi ca sa inlocuim prima cifra
unsigned int n,m,ultcif,putere;
int main()
{
cin>>n;
m=n; //salvam valoarea lui n in m pentru a prelucra numarul n si sa avem si valoarea sa initiala stocata
ultcif=m%10; //memoram ultima cifra;
putere=1; //dam valoarea 1 fiindca numarul 0 la orice putere da tot 0
while(n>9) //de ce m>9?Ca sa salvam prima cifra a numarului(ultima ramasa dupa multiplele "taieri")
{
putere*=10; //ridicam la putere
n/=10;
}
n= ((ultcif*putere+m%putere)/10)*10+n;//explic mai jos
cout<<n;
return 0;
}



Fie n=213097
m=n => m=213097
ultcif=m%10 => ultcif=7
Dupa efectuarea structurii while , p=10*10*10*10*10=100000 si n=2

// ultcif*putere : pozitionam ultima cifra pe postul primei cifra, adica ultcif*putere=7*100000=700000

//+m%putere :adunam restul numarului de dupa prima cifra a numarului initial, adica m%putere=213097%100000=13097

Asadar: (ultcif*putere+m%putere)=700000+13097=713097

// /10)*10 : facem loc pentru a adauga prima cifra pe postul ultimei cifre, adica 713097/10*10=71309*10=713090

// +n : adunam prima cifra a numarului initial si se obtine rezultate, adica 713090+2=713092 si dupa cum observati cele 2 cifre si-au inversat pozitiile