Nije u pitanju ovaj skolski primer sa testa vec princip. Ako neko hoce moze da ga optimizuje, meni je samo bitno da radi!
Code:
class bignum
{
char broj[100];
public:
bignum () {strcpy(broj,"0");}
bignum (char *novi) {strcpy(broj,novi);}
~bignum () {};
void Unos () {cout<<"\nUnesite broj\t";cin>>broj;}
void Prikaz () {cout<<broj;}
bignum operator- (bignum);
void zameni (int *,int *);
};
void bignum::zameni (int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
bignum bignum::operator- (bignum drugi)
{
bignum z;
int i=strlen(broj)-1,j=strlen(drugi.broj)-1;
int pom,br,veci,prenos=0,znak=0,k=(i>j?i:j);
char duzi[100],kraci[100];
if (i>j) {strcpy(duzi,broj); strcpy(kraci,drugi.broj);}
else if (i<j) {strcpy(duzi,drugi.broj);strcpy(kraci,broj);znak=1;}
else
{ veci=strcmp(broj,drugi.broj);
if (veci>0) {strcpy(duzi,broj); strcpy(kraci,drugi.broj);}
else {strcpy(duzi,drugi.broj);strcpy(kraci,broj);znak=1;}
}
z.broj[k+1]='\0';
if (k==j) zameni (&i,&j);
for(i,j;i>=0 || j>=0;i--,j--)
{
if ((pom=((duzi[i]-48)-(j<0?0:kraci[j]-48)-prenos))>=0)
{br=pom;prenos=0;}
else
{br=(duzi[i]-48)+10-(j<0?0:kraci[j]-48)-prenos;prenos=1;}
z.broj[k--]=br+48;
}
if (znak==1) {char temp[100]="-";strcat(temp,z.broj);strcpy(z.broj,temp);}
if (z.broj[0]=='0') z.broj[0]=' ';
return z;
}
class bignum
{
char broj[100];
public:
bignum () {strcpy(broj,"0");}
bignum (char *novi) {strcpy(broj,novi);}
~bignum () {};
void Unos () {cout<<"\nUnesite broj\t";cin>>broj;}
void Prikaz () {cout<<broj;}
bignum operator- (bignum);
void zameni (int *,int *);
};
void bignum::zameni (int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
bignum bignum::operator- (bignum drugi)
{
bignum z;
int i=strlen(broj)-1,j=strlen(drugi.broj)-1;
int pom,br,veci,prenos=0,znak=0,k=(i>j?i:j);
char duzi[100],kraci[100];
if (i>j) {strcpy(duzi,broj); strcpy(kraci,drugi.broj);}
else if (i<j) {strcpy(duzi,drugi.broj);strcpy(kraci,broj);znak=1;}
else
{ veci=strcmp(broj,drugi.broj);
if (veci>0) {strcpy(duzi,broj); strcpy(kraci,drugi.broj);}
else {strcpy(duzi,drugi.broj);strcpy(kraci,broj);znak=1;}
}
z.broj[k+1]='\0';
if (k==j) zameni (&i,&j);
for(i,j;i>=0 || j>=0;i--,j--)
{
if ((pom=((duzi[i]-48)-(j<0?0:kraci[j]-48)-prenos))>=0)
{br=pom;prenos=0;}
else
{br=(duzi[i]-48)+10-(j<0?0:kraci[j]-48)-prenos;prenos=1;}
z.broj[k--]=br+48;
}
if (znak==1) {char temp[100]="-";strcat(temp,z.broj);strcpy(z.broj,temp);}
if (z.broj[0]=='0') z.broj[0]=' ';
return z;
}