[ android~paranoid @ 17.03.2006. 09:59 ] @
Zadatak mi je da napravim klasu velikih brojeva (100 cifara) pomocu koje se ovaj program izvrasava: Code: #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); } 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? |