Frage

Ich versuche, eine große Zahl in einer Variablen C ++ zu platzieren. Die Zahl ist 600851475143

Ich habe versucht, unsigned long long int aber einen Fehler bekam sagen, es ist die Konstante war zu groß. Ich habe dann versucht, eine BigInt Bibliothek namens BigInt -> http://mattmccutchen.net/bigint/

Das Problem ist, ich kann den Code nicht kompilieren, da ich viele Fehler in Bezug auf den lib erhalten.

undefined reference to `BigInteger :: BigInteger (int)‘. <- viel von diesen

Hier ist mein Code so weit:

#include "string"
#include "iostream"       
#include "bigint/NumberlikeArray.hh"
#include "bigint/BigUnsigned.hh"
#include "bigint/BigInteger.hh"
#include "bigint/BigIntegerAlgorithms.hh"
#include "bigint/BigUnsignedInABase.hh"
#include "bigint/BigIntegerUtils.hh"
using namespace std;

int main() {

    //unsigned long int num = 13195;
    //unsigned long long int num = 600851475143;
    BigInteger num = 13195;
    int divider = 2;

    //num = 600851475143;

    while (1) {
        if ((num % divider) == 0) {
            cout << divider << '\n';
            num /= divider;
        }
        else
            divider++;

        if (num == 1)
            break;
    }
}

Wenn ich eine kleinere Zahl setzen und nicht die BigInt verwenden lib dieses Programm fein läuft. Jede Hilfe wird geschätzt: D

War es hilfreich?

Lösung

Sie können eine Ganzzahlliteral so lange an, indem das Suffix L.
Sie können eine Ganzzahlliteral solange lang durch das Suffix LL angeben.

#include <iostream>

int main()
{
    long long num = 600851475143LL;

    std::cout << num;
}

Andere Tipps

Die Zahl ist 600851475143 ist nicht zu groß für eine lange lange int aber Sie müssen die LL Suffix verwenden, wenn eine lange lange Konstanten (ULL für unsigned long long int) mit:

unsigned long long int num = 600851475143ULL;

Raison d'etre einer großen Integer-Bibliothek ist ganze Zahlen darzustellen, die Ihre Sprache nicht nativ verarbeiten kann. Das bedeutet, können Sie nicht einmal aufschreiben als wörtlich zu nehmen. Wahrscheinlich hat die Bibliothek eine Möglichkeit, eine Zeichenfolge als eine große Zahl zu analysieren.

In einem allgemeineren Fall, wenn Sie nicht Ihre Nummer in einem lange lange passen, und mit dem GNU LGPL Lizenz leben können ( http://www.gnu.org/copyleft/lesser.html ), würde ich vorschlagen, die GNU-Bibliothek Mehrfachgenaue ( http://gmplib.org/ ).

Es ist extrem schnell, in C geschrieben und kommt mit einer sehr coolen C ++ -. Wrapper-Bibliothek

Gibt es eine Bigint lib zu verbinden oder ein bigint.cpp zu kompilieren?

Wenn Sie nicht definierten Referenzfehler für die bignum Bibliothek bekommen, du hast wahrscheinlich verknüpfen es nicht. Unter Unix müssen Sie eine Option wie -lbigint passieren. Wenn Sie ein IDE verwenden, müssen Sie die Linker-Einstellungen finden und die Bibliothek hinzuzufügen.

Wie für die Zahlen, wie bereits gesagt, eine natürliche Konstante defaults Typ int. Sie müssen LL / ll verwenden eine lange, lange zu erhalten.

Das erste, was in diesem Fall zu tun ist, um herauszufinden, was die größte Zahl ist, die Sie in eine unsigned long long passen. Da es 64 Bit ist, wäre die größte Zahl 2 ^ 64-1 = 18446744073709551615, die größer als Ihre Zahl ist. Dann wissen Sie, dass Sie etwas falsch machen, und man sich die Antwort von Martin York zu sehen, wie es zu beheben.

Versuchen Sie dieses. Grundsätzlich können Sie Ihre eigene benutzerdefinierte Klasse haben, die verknüpfte Liste verwendet die Anzahl der unendlichen Größe zu speichern. (RAM ist die Beschränkung) Probier diese https://mattmccutchen.net/bigint/

Für alle anderen Probleme mit dieser Bibliothek 5 Jahre, die nach diese Frage gestellt wurde, ist dies die Antwort für Sie. Sie können Ihr Programm nicht nur kompilieren, wird es nicht mit einem hässlichen undurchdringlich Fehlern verbinden! Diese Bibliothek ist eine Sammlung von C ++ Dateien, die Sie angeblich zu kompilieren Dateien und Link .o gegen. Wenn man sich die Ausgabe der Make-Datei mit dem Beispielprogramm, sofern Sie dies sehen:

g++ -c -O2 -Wall -Wextra -pedantic BigUnsigned.cc
g++ -c -O2 -Wall -Wextra -pedantic BigInteger.cc
g++ -c -O2 -Wall -Wextra -pedantic BigIntegerAlgorithms.cc
g++ -c -O2 -Wall -Wextra -pedantic BigUnsignedInABase.cc
g++ -c -O2 -Wall -Wextra -pedantic BigIntegerUtils.cc
g++ -c -O2 -Wall -Wextra -pedantic sample.cc
g++ sample.o BigUnsigned.o BigInteger.o BigIntegerAlgorithms.o BigUnsignedInABase.o BigIntegerUtils.o -o sample

Ersetzen sample mit dem Namen des Programms, fügen Sie diese Zeilen in einer Make-Datei oder ein Skript, und gehen Sie weg.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top