Avatar billede snailwalker Nybegynder
07. december 2005 - 22:13 Der er 9 kommentarer og
1 løsning

Large Integer Class problemer

Jeg har udviklet en large integer class som gør det muligt i c++ at bruge tal på op til 10^2048.

Kildekoden kan ses her:

http://www.phpfi.com/90818

Jeg har desværre en del problemer med den.

1) Jeg kan ikke få << og >> operatoren til at virke. Jeg har kigget efter kildekoden i The C++ programming language, men kompileren siger istream og ostream kun tager et argument. (har udkommenteret dem så headeren kan kompileres)

2) Jeg har lidt problemer med at addere to tal hvis et af dem er negativt. Der er utrolig mange special cases man skal tage højde for synes jeg. Hvis nogle gad kigge på det og måske havde nogle ideer til at gøre det simplere ville det være dejligt :-)

3) Jeg skal også have implementeret en divisions og modulus operator, er der nogle der har nogle gode algoritmer?

Jeg giver 40 point for hvert spørgsmål ovenfor, da de er ret store.

Hvis der er nogle spørgsmål så bare fyr løs, min kode er ikke sååå gennemkommenteret som man kunne have ønsket :-)
Avatar billede arne_v Ekspert
07. december 2005 - 22:32 #1
jeg lavede noget for snart mange år siden

http://www.vajhoej.dk/arne/avu2/INC/INT.H
http://www.vajhoej.dk/arne/avu2/LIB/INT.C

alle 3 problemer er løst i den kode så kig !
Avatar billede snailwalker Nybegynder
08. december 2005 - 17:19 #2
Hmm du bliver nødt til at uddybe lidt, min kompiler siger at ostream& operator<< kun tager et argument, har ikke defineret operatorerne som friend functions. Når jeg så prøver at kalde i main:

lint aLint;
cin >> aLint;
cout << aLint;

får jeg at vide at den ikke kan finde nogen matchende operator >> :S

Modulus operatoren i dit program forstår jeg godt, men er ikke helt sikker på division. Hvorfor har du syv algoritmer i div_help?
Avatar billede arne_v Ekspert
08. december 2005 - 17:58 #3
<< virker i min kode så check det hele

jeg har 7 div fordi jeg eksperimenterede med at finde den hurtigste algoritme
Avatar billede snailwalker Nybegynder
08. december 2005 - 18:16 #4
hvilken en af dem virkede bedst?

Har løst andet problem.

Hvordan ville du skrive en output stream, kan man godt bare sige

for(int i = 1; i <10; i++)
{
s << ints[i];
}
return s;

??
Avatar billede snailwalker Nybegynder
08. december 2005 - 19:10 #5
Så har jeg også løst første problem, så går i gang med divisions algoritmen nu.

Men hvilken en af dem virkede bedst?
Avatar billede arne_v Ekspert
08. december 2005 - 19:24 #6
den der er aktiv går jeg udfra

men ellers mål selv
Avatar billede snailwalker Nybegynder
08. december 2005 - 22:25 #7
Hmm arne du bliver altså lige nødt til at hjælpe mig med at forstå din divisonsalgoritme.

Hvad gør den der funktion leading_equal_bits? Hvordan ville du evt. skrive den i base-10?
Avatar billede arne_v Ekspert
08. december 2005 - 23:41 #8
det er mange år siden at jeg skrev den kode

jeg kan intet huske idag

jeg vil muligvis prøve at kigge lidt på koden i weekenden

jeg mener at jeg brugt rigtigt meget tid på den integer division den gang, så
der ligger sikkert nogle tanker bag
Avatar billede snailwalker Nybegynder
09. december 2005 - 19:38 #9
Ville være lækkert hvis du gad. Er desværre løbet ind i et andet problem :S

lint j = 101;
cout << (j<=300);
for (lint i = 3; i <= 300; i+=2)
{
         
    cout << i << endl;
}

Løkken virker fint nok så længe i skal være mindre end 99, men så snart jeg siger fx i <= 300 så går den ind i en uendelig løkke og hvis jeg printer resultatet af i <= 300 så printer den true selvom i > 300.

Det sjove er bare at den virker fint i første del af ovenstående eksempel altså hvis jeg bare siger lint j = 500; cout << (lint<=300); så returnerer den nemlig false som den skal :S
Avatar billede snailwalker Nybegynder
14. juni 2007 - 18:29 #10
svarer
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester