Sunteți pe pagina 1din 7

Prelucrarea cifrelor.

Baze de numerație

• ultima cifră a lui n este n % 10;


• prin trunchiere se elimină ultima cifră a lui n; ultima cifră a valorii curente este cifra
zecilor a valorii inițiale;
• prin trunchieri succesive valoarea lui n devine 0. Numărul de trunchieri este în
concordanță cu numărul de cifre din valoarea inițială a lui n.
• pentru construcția unui număr R cifrele se adaugă în ordine:
o la sfârșitul lui R
o la începutul lui R

pag. 1 prof. GOREA-ZAMFIR CLAUDIU-CRISTIAN


https://www.pbinfo.ro/probleme/2221/cifre003
Se dă un număr natural n. Să se afle câte dintre numerele obținute din n prin ștergerea unei
cifre, sunt divizibile cu 3.
#include <iostream>
using namespace std;
int n , k , r ;
int main()
{
cin >> n ;
r = n % 3 ;
k = 0 ;
while ( n != 0 )
{
if ( (n%10)%3 == r ) k++ ;
n = n/10 ;
}
cout << k ;
return 0;
}

https://www.pbinfo.ro/probleme/3076/circular
Scrieți un program care citește un număr natural n și care să calculeze suma S a tuturor
numerelor obținute prin permutări circulare la dreapta ale cifrelor lui n cu o poziție.
#include <iostream>
using namespace std;
int main()
{
long long n,s=0,x=0,S;
cin>>n;
while(n>0)
{
s=s+n%10;
n=n/10;
x=x*10+1;
}
S=s*x;
cout<<S;
return 0;
}

pag. 2 prof. GOREA-ZAMFIR CLAUDIU-CRISTIAN


Cifra de control a unui număr
Pentru un număr natural dat, se calculează #include <iostream>
cifra de control în felul următor: using namespace std;
int n,s;
• se determină suma cifrelor int main()
• pentru rezultat se determină suma
{
cifrelor
cin>>n;
• se continuă până când suma devine
un număr dintr-o singură cifră, while(n>=10)
aceasta fiind cifra de control a {
numărului inițial s=0;
while(n)
cc(4568258)=cc(38)=cc(11)=2 {
s+=n%10;
n/=10;
}
n=s;
}
cout<<n<<endl;
return 0;
}
n=4568258 while ( n > 9 )
n=456825+8=456833 {
n=45683+3=45686 n = n/10 + n%10 ;
n=4568+6=4574 }
n=457+4=461
n=46+1=47
n=4+7=11
n=1+1=2
criteriul de divizibilitate cu 9 r=n%9;
if (r==0)
cc = 9;
else
cc = r;

pag. 3 prof. GOREA-ZAMFIR CLAUDIU-CRISTIAN


Baze de numerație
Un număr scris în baza 10 va avea cifrele 0, 1, 2, …, 9 – resturile posibile la împărțirea
cu 10. Știm deja că există sistemul de numerație binar, în baza 2. Cifrele sunt 0 și 1 –
resturile posibile la împărțirea cu 2.

Transformarea din baza 10 în baza b


Cum transformăm un număr oarecare n din baza 10 într-o bază oarecare, b? Algoritmul de
transformare este foarte asemănător cu cel de determinare a cifrelor în baza 10. De fapt,
este chiar identic, doar că baza nu este 10, ci b. Mai exact:

• împărțim numărul n la b. Obținem un cât și un rest;


• împărțim câtul la b. Obținem un cât și un rest;
• împărțim noul cât la b și obținem un cât și un rest;
• continuăm împărțirile până când obținem câtul 0;
• resturile obținute, scrise în ordinea inversă obținerii, reprezintă scrierea în baza b a
lui n.

Transformarea din baza b în baza d


De regulă, pentru transformarea dintr-o bază oarecare b într-o bază oarecare d se folosește
ca “bază de manevră” baza 10. Mai exact:

• se dă un număr x în baza b
• se transformă numărul x din baza b în baza 10 și se obține un număr y
• se transformă numărul y din baza 10 în baza d și se obține rezultatul final

https://www.pbinfo.ro/probleme/429/cifbin
Se citește un număr natural n. Să se determine câte cifre 0 și câte cifre 1 are reprezentarea
în baza 2 a acestui număr.
#include <iostream>
using namespace std;

int main(){
int n;
cin >> n;
int nz = 0, nu = 0;
while(n)
{
if(n % 2 == 0)
nz ++;
else
nu ++;
n /= 2;
}
cout << nz << " " << nu;
return 0;
}

pag. 4 prof. GOREA-ZAMFIR CLAUDIU-CRISTIAN


https://www.pbinfo.ro/probleme/945/baze
Se dă un număr n scris în baza b. Să se afișeze scrierea acestuia în baza c.
#include <iostream>
using namespace std;
int n,b,c,p,cif,nb;
int main()
{
cin>>n;
cin>>b>>c;
p=1;
while(n>0)
{
cif=n%10;
nb=nb+cif*p;
p=p*b;
n=n/10;
}
//cout<<nb<<" ";
p=1;
while(p*c<=nb)
p=p*c;
while(p>0)
{
cif=nb/p;
cout<<cif;
nb=nb%p;
p=p/c;
}
return 0;
}

pag. 5 prof. GOREA-ZAMFIR CLAUDIU-CRISTIAN


Alte utilizari ale bazelor de numeratie

Generari de solutii
https://www.pbinfo.ro/probleme/1078/adunscad

Considerăm un număr întreg N şi un şir de M cifre zecimale nenule. Să se determine dacă


numărul N poate fi rezultatul unei expresii aritmetice simple (fără paranteze), formată
exclusiv din cifrele şirului citit şi din operatorii aritmetici desemnaţi pentru operaţiile de
adunare şi scădere (+, -).
#include <fstream>
using namespace std;
int n,m,i,j,gasit,nr,aux,x,y,multime[22],v[22],S,suma;
ifstream cin("adunscad.in");
ofstream cout("adunscad.out");
int main()
{
cin>>S>>n;
for(i=1;i<=n;i++)
{
cin>>v[i];
}
gasit=0;
nr=0;
while(gasit==0 and nr<=(1<<n)-1)
{
aux=nr;
suma=0;
for(x=1;x<=n;x++)
{
if(aux%2==1)
suma=suma+v[x];
else
suma=suma-v[x];
aux=aux/2;
}
if(suma==S)
{
gasit=1;
aux=nr;
if(aux%2==0)
cout<<"-";
cout<<v[1];
aux=aux/2;
for(i=2;i<=n;i++)
{
if(aux%2==1)

pag. 6 prof. GOREA-ZAMFIR CLAUDIU-CRISTIAN


cout<<"+";
else
cout<<"-";
cout<<v[i];
aux=aux/2;
}
return 0;
}
nr++;
}
cout<<0;
return 0;
}

Ridicare la putere in timp logaritmic


https://www.pbinfo.ro/probleme/1681/power
#include <iostream>
using namespace std;
long long p;
int a,b,i;
int main()
{
cin>>a>>b;
p=1;
while(b)
{
if(b%2==1)
p=p*a;
a=a*a;
b/=2;
}
cout<<p;
return 0;
}

pag. 7 prof. GOREA-ZAMFIR CLAUDIU-CRISTIAN

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

  • Info Gym DP
    Info Gym DP
    Document5 pagini
    Info Gym DP
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • Runda 2 2022-23
    Runda 2 2022-23
    Document5 pagini
    Runda 2 2022-23
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • RMQ. LCA. Parcurgere Euler
    RMQ. LCA. Parcurgere Euler
    Document25 pagini
    RMQ. LCA. Parcurgere Euler
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • ONI2022 Baraj Juniori Editorial
    ONI2022 Baraj Juniori Editorial
    Document6 pagini
    ONI2022 Baraj Juniori Editorial
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • Teste Antrenament 2020
    Teste Antrenament 2020
    Document162 pagini
    Teste Antrenament 2020
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • Matrice de Ordin 2 - Enunțuri
    Matrice de Ordin 2 - Enunțuri
    Document2 pagini
    Matrice de Ordin 2 - Enunțuri
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • Solutie
    Solutie
    Document1 pagină
    Solutie
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • Moara Cu Noroc
    Moara Cu Noroc
    Document5 pagini
    Moara Cu Noroc
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • Eseu Basm Cult
    Eseu Basm Cult
    Document4 pagini
    Eseu Basm Cult
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • Permutari
    Permutari
    Document5 pagini
    Permutari
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • Analiza 2016 2017
    Analiza 2016 2017
    Document366 pagini
    Analiza 2016 2017
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • Razvan Economie
    Razvan Economie
    Document1 pagină
    Razvan Economie
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • Renasterea Artistica
    Renasterea Artistica
    Document48 pagini
    Renasterea Artistica
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • Iluminismul
    Iluminismul
    Document2 pagini
    Iluminismul
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • Sistemul Politic American
    Sistemul Politic American
    Document3 pagini
    Sistemul Politic American
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • Proiect Romana Dimneasiunea Religioasa
    Proiect Romana Dimneasiunea Religioasa
    Document4 pagini
    Proiect Romana Dimneasiunea Religioasa
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • Decebal Si Traian 5698e16acd16b
    Decebal Si Traian 5698e16acd16b
    Document15 pagini
    Decebal Si Traian 5698e16acd16b
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • Oralitatea
    Oralitatea
    Document1 pagină
    Oralitatea
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • Renasterea Jocurilor Olimpice
    Renasterea Jocurilor Olimpice
    Document33 pagini
    Renasterea Jocurilor Olimpice
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • 0 1 Anglia
    0 1 Anglia
    Document26 pagini
    0 1 Anglia
    Razvan Alexandru Rotaru
    Încă nu există evaluări
  • Primul Razboi Mondial
    Primul Razboi Mondial
    Document15 pagini
    Primul Razboi Mondial
    Razvan Alexandru Rotaru
    Încă nu există evaluări