[ Tom Violence @ 27.03.2010. 16:24 ] @
Tek što sam počeo pisati datu klasu naletio sam na jedan za mene malo ozbiljniji problem. BigInt brojeve nisam namjeravao čuvati u dekadnom brojnom sistemu, već u sistemu sa bazom 256, tako da sa jednim char-om mogu kodirati svih 256 cifara. Problem se javlja u konstruktoru pri konverziji iz dekadnog sistema u sistem baze 256. Ako konstruktor prima integer, tada mogu koristiti standardni školski metod sa cjelobrojnim djeljenjem, ali šta ako konstruktor prima string(a mora primati string ako želim deklarisati iole veću varijablu)? Kako vršiti cjelobrojno djeljenje ako na raspolaganju imam samo cifre broja, a ne cijeli broj? Hvala na pomoći.
[ Mihajlo Cvetanović @ 27.03.2010. 16:47 ] @
Jesi li probao da guglaš C++ biginteger? Prva dva linka su dve različite implementacije, a u nastavku ima još korisnih linkova. Možda ti sve to da ideju šta i kako.
[ Rato iks de @ 27.03.2010. 17:22 ] @
Sta ti izbaci kompajler kao gresku?Pokusaj zadati string kao znak od 256 karaktera.
Evo ovako:

char string[256];
[ Nedeljko @ 27.03.2010. 19:19 ] @
Za int->BigInteger ti ne treba konverzija iz dekadnog sistema, već obično šiftovanje.

Za string->BigInteger imaš sledeći algoritam:

Code:
BigInteger::BigInteger(const string &numeral) {
    *this = 0;

    for (size_t i=0; i<numeral.size(); i++) {
        *this *= 10;
        *this += numeral[i] - '0';
    }
}


Naravno, treba da znaš kako se množi broj u sistemu sa osnovom 256 sa 10 i kako mu se dodaje konstanta 0-9.
[ Wajda.W @ 27.03.2010. 19:31 ] @
@Rato iks de
Koliko sam ja shvatio ne izbaci mu gresku, nego on je do sada ovako radio:

Code:

long p = 3254566;
char c[10];
int i = 0;
while(p)
{
c[i++] = p%256;
p/=256;
}


Znaci vadio je cifre iz broja nad kojim je definisana operacija % ili ti moduo.
A sad hoce da napravi ovo isto samo sto se broj ne nalazi u long, nego je zapisan kao string, znaci "3254566";
A nad stringom nije definisana operacija %.
U tome je fora.
[ Rato iks de @ 27.03.2010. 20:19 ] @
Samo,kako sad da mnozimo osnovu 256 sa 10,moze li neki drugi broj umjesto 10?
[ Tom Violence @ 28.03.2010. 14:14 ] @
@Nedeljko
Hvala za odgovor. Ipak mi nije jasno kako sa integer-a prelaziti na BigInteger šiftanjem. Mi smo na fakultetu učili dva naćina sa prelaska iz baze 10 u bazu n i to metodom cjelobrojnog djeljenja i metodom oduzimanja, ali meni bar ne ulazi u glavu kako je to povezano sa šiftanjem.
[ Nedeljko @ 31.03.2010. 09:37 ] @
Celi brojevi u računaru nisu predstavljeni u osnovi 10, već u osnovi 2.