izvrasava:
Code:
#include "bignum.h"
void main (void)
{
BIGNUM rezultat, br1("2356723544523"), br2 ;
br2.unos ();
rezultat = br1 + br2 ;
rezultat.prikaz ();
}
#include "bignum.h"
void main (void)
{
BIGNUM rezultat, br1("2356723544523"), br2 ;
br2.unos ();
rezultat = br1 + br2 ;
rezultat.prikaz ();
}
Ovo za neke brojeve radi, recimo za 7777 nista ne ispise, za neke druge brojeve
ispise tacno resenje, iz tog testiranja nisam mogao da skontam zbog cega je to (nije problem
prenosenje jedinice).
Code:
BIGNUM BIGNUM::operator+ (BIGNUM y)
{
BIGNUM pom;
int i=0,k,j;
k=strlen(br)-1;
j=strlen(y.br)-1;
int c=0; //sluzi za ispitivanje da li treba preneti jedinicu
int l=0; //ovo ce biti ta jedinica i ona ce se dodavati
while ((k>=0) && (j>=0))
{
if (c==1)
{
l=1;
c=0;
}
else
{
l=0;
c=0;
}
if (((br[k]-48)+(y.br[j]-48))>=10)
{
pom.br[i]=l+((br[k]-48)+(y.br[j]-48))%10;
c=1;
}
else
{
pom.br[i]=l+((br[k]-48)+(y.br[j]-48));
}
k--;
j--;
i++;
}
if (k) //nisam uzimao da je veci broj od onog inicijalizovanog pri testiranju
//ako je drugi veci broj onda ide ovako isto...
{
while (k>=0)
{
pom.br[i]=l+br[k]-48;
k--;
i++;
}
}
pom.br[i]='\0';
return pom;
}
...
void BIGNUM::prikaz()
{
for(int i=0;i<strlen(br);i++)
br[i]+=48;
for(i=strlen(br)-1;i>=0;i--)
{
// if ((br[i]>=48) && (br[i]<=57))
cout << br[i];
}
}
Klasa:
#ifndef _BIGNUM_h_
#define _BIGNUM_h_
class BIGNUM
{
char br[101];
public:
BIGNUM () {};
~BIGNUM () {};
BIGNUM(char[]);
void unos();
void prikaz();
BIGNUM operator+ (BIGNUM);
};
#endif
Konstruktor:
BIGNUM::BIGNUM(char x1[101])
{
strcpy(br,x1);
}
BIGNUM BIGNUM::operator+ (BIGNUM y)
{
BIGNUM pom;
int i=0,k,j;
k=strlen(br)-1;
j=strlen(y.br)-1;
int c=0; //sluzi za ispitivanje da li treba preneti jedinicu
int l=0; //ovo ce biti ta jedinica i ona ce se dodavati
while ((k>=0) && (j>=0))
{
if (c==1)
{
l=1;
c=0;
}
else
{
l=0;
c=0;
}
if (((br[k]-48)+(y.br[j]-48))>=10)
{
pom.br[i]=l+((br[k]-48)+(y.br[j]-48))%10;
c=1;
}
else
{
pom.br[i]=l+((br[k]-48)+(y.br[j]-48));
}
k--;
j--;
i++;
}
if (k) //nisam uzimao da je veci broj od onog inicijalizovanog pri testiranju
//ako je drugi veci broj onda ide ovako isto...
{
while (k>=0)
{
pom.br[i]=l+br[k]-48;
k--;
i++;
}
}
pom.br[i]='\0';
return pom;
}
...
void BIGNUM::prikaz()
{
for(int i=0;i<strlen(br);i++)
br[i]+=48;
for(i=strlen(br)-1;i>=0;i--)
{
// if ((br[i]>=48) && (br[i]<=57))
cout << br[i];
}
}
Klasa:
#ifndef _BIGNUM_h_
#define _BIGNUM_h_
class BIGNUM
{
char br[101];
public:
BIGNUM () {};
~BIGNUM () {};
BIGNUM(char[]);
void unos();
void prikaz();
BIGNUM operator+ (BIGNUM);
};
#endif
Konstruktor:
BIGNUM::BIGNUM(char x1[101])
{
strcpy(br,x1);
}
Ispisao sam skoro sve, posto nemam jos toliko iskustva sa programima u c++ - u,moguce je da
sam napravio neku pocetnicku gresku.
Posto ne znam unapred velicinu tog niza brojeva, ja sam to smestao redom u pom(od 0),
a pri ispisu samo obrnem redosled. Gde je greska?
Mislim, šta reći !