BigInteger
-
... wollte mein Collatz-Programm auf beliebig große Integer umstellen, wählte Bibliothek BigInteger, allerdings noch ein Link-Problem, das ich nicht verstehe.
Vielleicht gibt es hier Erfahrung. MS VC++ 2008.//deleted (gelöst)
Compiler o.k.
Linker-Meldung: 2001 und 1120
BigIntegerUtils.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall BigInteger::BigInteger(class BigUnsigned const &,enum BigInteger::Sign)" (??0BigInteger@@QAE@ABVBigUnsigned@@W4Sign@0@@Z)".
fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
-
1. musst vll noch ne lib dazulinken?!
2. wahrscheinlich hat BigUnsigned den operator << nicht überladen...
bb
-
http://mattmccutchen.net/bigint/index.html
ad 1) war keine lib dabei
-
Erhard Henkes schrieb:
http://mattmccutchen.net/bigint/index.html
ad 1) war keine lib dabei
Aber .cc-Dateien, die laut README entweder vom Makefile in eine lib gebunden oder von Dir in das Projekt eingefügt werden müssen.
-
Die ganzen cc-Dateien habe ich ins Projekt eingebunden. Vielleicht habe ich eine übersehen, muss mal nachschauen. Hatte BigInteger.cc übersehen. Thx.
Jetzt klappt es gut, möchte doch in unerforschtem Gebiet analysieren.

// Berechnung der "3n+1"-Folge (Collatz-Folge) #include <iostream> #include <limits> #include <string> #include "BigIntegerLibrary.h" using namespace std; void wait() { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n'); std::cin.get(); } int main() { /*********************************************************** Eingabebereich ****************************/ BigUnsigned element_limit(1000000) ; // Maximum H(n) BigUnsigned element_print_limit(4100) ; // Ausgabe nur, wenn H(n) > element_print_limit string s("10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); // Beginn der Berechnung bei start BigUnsigned start = easyStringToBI(s); s = "10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000"; // Ende der Berechnung bei end BigUnsigned end = easyStringToBI(s); /*********************************************************** Eingabebereich ****************************/ for( BigUnsigned j = start; j < end; j++ ) { BigUnsigned zahl = j ; BigUnsigned i = 1 ; while( ( zahl != BigUnsigned(1) ) && ( i <= element_limit ) ) { //cout << zahl << '\t'; BigUnsigned rest = zahl % BigUnsigned(2); if( rest != BigUnsigned(1) ) zahl /= BigUnsigned(2) ; else zahl = BigUnsigned(3) * zahl + BigUnsigned(1) ; i++; } if( zahl == BigUnsigned(1) ) { if( i > element_print_limit ) { cout << "Startzahl: " << j; cout << "\tAnzahl: " << i << endl; } } else { cout << "Startzahl: " << j; cout << "kein Resultat (Anzahl-Limit erhoehen)" << endl; } if( i > element_limit ) cerr << "Anzahl zu hoch" << endl; } wait(); }
-
Wer es überprüfen möchte:
http://matheroboter.de/collatz.php?berechnen=1&cat=6&zahl=10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001398