Sunteți pe pagina 1din 6

#include <iostream>

#include <string.h>

using namespace std;

/*

Scrieti un program care, fiind date 3 numere a,b,c verifica daca exista 3 baze mai mici decat 16

astfel incat a=b+c;

*/

//definim constantele dupa 10

#define A 10

#define B 11

#define C 12

#define D 13

#define E 14

#define F 15

bool bazaPeste9(char nr[30]){

bool bazaP9=false;

int i;

for (i=0;i<30,nr[i]!='\0';i++)

if (nr[i]>='A' && nr[i]<='Z')

bazaP9 = true;

return bazaP9;

}
void inversareNumar(char nr[30]){

char temp;

int n = strlen(nr);

for (int i=0;i<n/2;i++){

temp=nr[i];

nr[i]= nr[n-i-1];

nr[n-i-1] = temp;

int bazaMinima(char nr[]){

int b=2;

int bmin =1;

for (int i=0;i<30,nr[i]!='\0';i++){

switch (nr[i]){

case 'A':

b= A;

break;

case 'B':

b= B;

break;

case 'C':

b= C;

break;
case 'D':

b= D;

break;

case 'E':

b= E;

break;

case 'F':

b= F;

break;

default :

b= (int)(nr[i] - 48);

break;

if (b>bmin)

bmin = b;

bmin++;

if (bmin>=2 && bmin<=16)

return bmin;

return -1; // eroare in caz contrar

int transformareInBaza10(int dinBaza, char nr[100]){


int numarTransformat=0;

int coeficientBaza = 1;

//if (bazaPeste9(nr)){

for (int i=0;i<30,nr[i]!='\0';i++){

switch (nr[i]){

case 'A':

numarTransformat+= A * coeficientBaza;

break;

case 'B':

numarTransformat+= B * coeficientBaza;

break;

case 'C':

numarTransformat+= C * coeficientBaza;

break;

case 'D':

numarTransformat+= D * coeficientBaza;

break;

case 'E':

numarTransformat+= E * coeficientBaza;

break;

default :

numarTransformat+= (int)(nr[i] - 48)*coeficientBaza;

break;
}

coeficientBaza=coeficientBaza*dinBaza;

//}

return numarTransformat;

int main()

char a[100],atemp[100];

char b[100],btemp[100];

char c[100],ctemp[100];

cout<<"a=";cin>>a;

strcpy(atemp,a);

//cout<<bazaMinima(a);

cout<<"b=";cin>>b;

strcpy(btemp,b);

//cout<<bazaMinima(b);

cout<<"c=";cin>>c;

strcpy(ctemp,c);

inversareNumar(a);inversareNumar(b);inversareNumar(c);
//cout<<bazaMinima(c);

bool esteSuma = false;

bool gasit = false;

int baza_a;

int baza_b;

int baza_c;

cout<<"Variante de adunare:"<<endl;

for (int i=bazaMinima(a);i<=16;i++)

for (int j=bazaMinima(b);j<=16;j++)

for (int k=bazaMinima(c);k<=16;k++)

if (transformareInBaza10(i,a)==(transformareInBaza10(j,b)+transformareInBaza10(k,c))){

esteSuma= true;

baza_a = i;

baza_b = j;

baza_c = k;

if (esteSuma)
cout<<atemp<<"("<<baza_a<<")="<<btemp<<"("<<baza_b<<")+"<<ctemp<<"("<<baza_c<<")"<<endl;

gasit = true;

esteSuma=false;

if (gasit) cout<<"pot fi adunate"<<endl;

else cout<<"nu pot fi adunate"<<endl;

return 0;

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