Eliminare de cifre în 2 paşi

Eliminarea de cifre se va realiza în 2 paşi cu ajutorul oglinditului. Astfel, când aflăm oglinditul, vom avea condiţia ca cifra să nu aibă o anumită proprietate pentru a nu fi eliminată. Apoi, vom oglindi oglinditul, pentru a obţine numărul cu cifrele în ordinea corectă.

Exemplu: Eliminaţi cifrele pare dintr-un număr n.

Algoritmul în C++

#include

using namespace std;

int main()
 {
 unsigned x,ogl=0,ogl1=0;
 cin>>x;
 while(x!=0)
 {
 if((x%10)%2!=0)ogl=ogl*10+x%10;
 x=x/10;
 }
 while(ogl!=0)
 {
 ogl1=ogl1*10+ogl%10;
 ogl=ogl/10;
 }
 cout<<ogl1;
 return 0;
 }

Oglinditul unui număr. Palindrom.

Oglinditul unui număr este un număr care conţine toate cifrele acelui număr în aceeaşi ordine, însă de la dreapta la stânga. De exemplu, oglinditul lui 178 este 871. El se obţine astfel:

Algoritmul în C++

#include

using namespace std;
int main()
{
unsigned x,ogl=0;
cin>>x;
while(x!=0)
{
ogl=ogl*10+x%10;
x=x/10;
}
cout<<ogl;
return 0;
}

Un palindrom este un număr egal cu oglinditul său. De exemplu, numărul 54345 are oglinditul 54345, cu care este egal, deci este un palindrom. Pentru a verifica dacă un număr este palindrom se va afla oglinditul, după care se va compara cu numărul iniţial.

Algoritmul în C++

#include

using namespace std;

int main()
{
unsigned x,ogl=0,x1;
cin>>x;
x1=x;
while(x1!=0)
{
ogl=ogl*10+x1%10;
x1=x1/10;
}
if(x==ogl)cout<<"Numarul este un palindrom";
else cout<<"Numarul nu este un palindrom";
return 0;
}

 

Simularea adunării, a scăderii, a înmulţirii

1.Simularea adunării

#include

using namespace std;

int main()
 {
 unsigned x,y,cx,cy,p,t,s,cs;
 cin>>x>>y;
 p=1;
 t=0;
 s=0;
 while(x!=0||y!=0)
 {
 cx=x%10;x=x/10;
 cy=y%10;y=y/10;
 cs=(cx+cy+t)%10;
 t=(cx+cy+t)/10;
 s=s+cs*p;
 p=p*10;
 }
 if(t>0)s=s+p;
 cout<<s;
 return 0;
 }

2.Simularea scăderii

#include

using namespace std;

int main()
 {
 unsigned x,y,cx,cy,cs,s=0,t=0,p=1;
 cin>>x>>y;
 while(x!=0||y!=0)
 {
 cx=x%10;x=x/10;
 cy=y%10;y=y/10;
 if(cx-t>=cy)
 {
 cs=cx-cy-t;
 t=0;
 }
 else
 {
 cs=cx-cy-t+10;
 t=1;
 }
 s=s+p*cs;
 p=p*10;
 }
 cout<<s;
 return 0;
 }

3.Simularea înmulţirii dintre un număr şi o cifră

#include

using namespace std;

int main()
 {
 unsigned a,x,cs,p=1,s=0,ca,t=0;
 cin>>a>>x;
 while(a>0)
 {
 ca=a%10;a=a/10;
 cs=(ca*x+t)%10;
 t=(ca*x+t)/10;
 s=s+p*cs;
 p=p*10;
 }
 if(t>0)s=s+p*t;
 cout<<s;
 return 0;
 }

Cifra de control

Cifra de control a unui număr este cifra care se calculează însumând cifrele numărului, apoi însumând cifrele sumei, şi tot aşa până se obţine un număr cu o cifră. De exemplu, cifra de control a numărului 9895 se calculează: 9+8+9+5=31 ⇒ 3+1=4 ⇒ 4 – cifra de control.

Observăm că ea se poate calcula adunând numărului cu ultima cifră exclusă acea cifră.

9895

-îl excludem pe 5 şi îl adunăm la numărul rămas: 989+5=994

-îl excludem pe 4 şi îl adunăm la numărul rămas: 99+4=103

-îl excludem pe 3 şi îl adunăm la numărul rămas: 10+3=13

-îl excludem pe 3 şi îl adunăm la numărul rămas: 1+3=4

Algoritmul în C++

#include

using namespace std;

int main()
{
unsigned x;
cin>>x;
while(x>9)
{
x=x/10+x%10;
}
cout<<x;
return 0;
}

Scrierea în baza 10(construire de numere sau eliminare de cifre)

În scrierea în baza 10 va exista o variabilă iniţializată cu 1 care se va înmulţi cu 10 în timpul structurii repetitive pentru a construi numere/elimina cifre.

Exemplu: Aflaţi numărul format din cifrele impare ale numărului n.

#include

using namespace std;

int main()
 {
 unsigned n,nr=0,p=1;
 cin>>n;
 while(n!=0)
 {
 if((n%10)%2==1)
 {
 nr=nr+p*(n%10);
 p=p*10;
 }
 n=n/10;
 }
 cout<<nr;
 return 0;
 }

Astfel, putem spune fie că am eliminat cifrele pare ale lui n, fie că am construit un număr cu cifrele impare ale lui n.

Numărul de apariţii al minimului sau al maximului

Pentru a afla numărul de apariţii al cifrei maxime sau minime a unui număr, mai întâi vom face o copie cu ajutorul căreia vom afla această cifră, după care vom compara fiecare cifră cu max/min, iar de fiecare dată când se va găsi o cifră egală cu max/min unei variabile iniţializate cu 0 i se va adăuga 1. Această variabilă va reprezenta la sfârşit numărul de apariţii al max/min.

Algoritmul în C++

#include 

using namespace std;

int main()
 {
     unsigned x,x1,max=0,k=0;
     cin>>x;
     x1=x;
     while(x1!=0)
     {
         if(x1%10>max)max=x1%10;
         x1=x1/10;
     }
     while(x!=0)
     {
         if(x%10==max)k++;
         x=x/10;
     }
     cout<<k;
     return 0;
 }

Cele mai mari/mici 2/3 cifre

Pentru a afla cele mai mari sau cele mai mici 2 cifre ale unui număr, vom realiza mai întâi un tabel prin care să înţelegem logica algoritmului pe care urmează să îl scriem. Aici x va fi numărul, cx va fi cifra sa (vom lua pe rând fiecare cifră pentru a vedea care din ele este cea mai mare şi care este a doua cea mai mare), max1 va fi cea mai mare cifră, iar max2 va fi a doua cea mai mare cifră.

Astfel, iniţializăm max1 şi max2 cu 0. Dacă cifra este mai mare decât max1, atunci max2 va primi valoarea curentă a lui max1, iar max1 va primi cifra respectivă. Dacă cifra nu este mai mare decât max1 dar este mai mare decât max2, max2 va primi cifra respectivă. Dacă cifra nu este mai mare nici decât max1, nici decât max2, max1 şi max2 nu se vor schimba.

Exemplu:

x              cx           max1        max2

0                               0                0

986524    4              4                0

98652      2              4                2

9865        5               5                4

986          6               6                5

98            8               8                6

9              9               9                8

Algoritmul în C++

#include

using namespace std;

int main()
{
unsigned x,cx,max1=0,max2=0;
cin>>x;
while(x!=0)
{
cx=x%10;x=x/10;
if(cx>max1)
{
max2=max1;
max1=cx;
}
else if(cx>max2) max2=cx;
}
cout<<max1<<” “<<max2;
return 0;
}

În cazul în care trebuie să aflăm şi a 3-a cea mai mare cifră, vom urma aceeaşi logică, având o nouă variabilă: max3.

#include

using namespace std;

int main()
{
unsigned x,cx,max1=0,max2=0,max3=0;
cin>>x;
while(x!=0)
{
cx=x%10;x=x/10;
if(cx>max1)
{
max3=max2;
max2=max1;
max1=cx;
}
else if(cx>max2)
{
max3=max2;
max2=cx;
}
else if(cx>max3) max3=cx;
}
cout<<max1<<” “<<max2<<” “<<max3;
return 0;
}
Dacă trebuie să aflăm minimul, vom urma aceleaşi etape, doar că min1, min2 şi min3 se vor iniţializa cu 10, iar semnele evident se vor schimba din “>” în “<“.