Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

BigInteger klasa

[es] :: C/C++ programiranje :: BigInteger klasa

[ Pregleda: 1614 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Tom Violence

Član broj: 253015
Poruke: 8
92.36.174.*



+9 Profil

icon BigInteger klasa27.03.2010. u 16:24 - pre 171 meseci
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.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: BigInteger klasa27.03.2010. u 16:47 - pre 171 meseci
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.
 
Odgovor na temu

Rato iks de
Ratomir Vukadin
Software Engineer
Sarajevo

Član broj: 254175
Poruke: 68
*.paleol.net.



+3 Profil

icon Re: BigInteger klasa27.03.2010. u 17:22 - pre 171 meseci
Sta ti izbaci kompajler kao gresku?Pokusaj zadati string kao znak od 256 karaktera.
Evo ovako:

char string[256];
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
212.200.65.*



+2790 Profil

icon Re: BigInteger klasa27.03.2010. u 19:19 - pre 171 meseci
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.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Wajda.W
Vladimir Vajda
Zrenjanin

Član broj: 127039
Poruke: 323
*.dynamic.isp.telekom.rs.



+101 Profil

icon Re: BigInteger klasa27.03.2010. u 19:31 - pre 171 meseci
@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.
 
Odgovor na temu

Rato iks de
Ratomir Vukadin
Software Engineer
Sarajevo

Član broj: 254175
Poruke: 68
*.paleol.net.



+3 Profil

icon Re: BigInteger klasa27.03.2010. u 20:19 - pre 171 meseci
Samo,kako sad da mnozimo osnovu 256 sa 10,moze li neki drugi broj umjesto 10?
 
Odgovor na temu

Tom Violence

Član broj: 253015
Poruke: 8
*.pppoe16931.bih.net.ba.



+9 Profil

icon Re: BigInteger klasa28.03.2010. u 14:14 - pre 171 meseci
@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.
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
212.200.65.*



+2790 Profil

icon Re: BigInteger klasa31.03.2010. u 09:37 - pre 171 meseci
Celi brojevi u računaru nisu predstavljeni u osnovi 10, već u osnovi 2.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

[es] :: C/C++ programiranje :: BigInteger klasa

[ Pregleda: 1614 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.