Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 2.285 pregleda

Najnovija ↓

BigInteger klasa 27.03.2010. u 17:24 · pre 202 meseca #1
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.
Re: BigInteger klasa 27.03.2010. u 17:47 · pre 202 meseca #2
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.
Re: BigInteger klasa 27.03.2010. u 18:22 · pre 202 meseca #3
Sta ti izbaci kompajler kao gresku?Pokusaj zadati string kao znak od 256 karaktera.
Evo ovako:

char string[256];
Re: BigInteger klasa 27.03.2010. u 20:19 · pre 202 meseca #4
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.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: BigInteger klasa 27.03.2010. u 20:31 · pre 202 meseca #5
@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.
Re: BigInteger klasa 27.03.2010. u 21:19 · pre 202 meseca #6
Samo,kako sad da mnozimo osnovu 256 sa 10,moze li neki drugi broj umjesto 10?
Re: BigInteger klasa 28.03.2010. u 15:14 · pre 202 meseca #7
@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.
Re: BigInteger klasa 31.03.2010. u 10:37 · pre 202 meseca #8
Celi brojevi u računaru nisu predstavljeni u osnovi 10, već u osnovi 2.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme