2010-08-29 4 views
10

Ich muss die Nummer 600851475143 in meinem Programm speichern. Ich versuchte es in long long int variabel und long double als auch zu speichern, aber es zeigt den Fehler zum KompilierenWelchen Datentyp für eine sehr große Anzahl in C++ zu verwenden?

integer constant is too large for "long" type. 

ich auch unsigned long long int auch versucht habe. Ich verwende MinGW 5.1.6 zum Ausführen von g ++ unter Windows.

Welchen Datentyp sollte ich zum Speichern der Nummer verwenden?

Antwort

28

long long ist in Ordnung, aber Sie müssen ein Suffix für das Literal verwenden.

long long x = 600851475143ll; // can use LL instead if you prefer. 

Wenn Sie die ll vom Ende der wörtlichen verlassen, dann nimmt der Compiler, dass Sie es wollen ein int sein, die in den meisten Fällen ist eine 32-Bit-Zahl mit Vorzeichen. 32-Bit sind nicht genug, um diesen großen Wert zu speichern, daher die Warnung. Wenn Sie ll hinzufügen, geben Sie dem Compiler an, dass das Literal als long long interpretiert werden soll, das groß genug ist, um den Wert zu speichern.

Das Suffix ist auch nützlich, um festzulegen, welche Überladung für eine Funktion aufgerufen werden soll. Zum Beispiel:

void foo(long long x) {} 
void foo(int x) {} 

int main() 
{ 
    foo(0); // calls foo(int x) 
    foo(0LL); // calls foo(long long x) 
} 
+0

gut Dank, aber kann mir jemand erklären, warum wir das tun? Was passiert, wenn die Literale hinzugefügt werden? – Vaibhav

+0

@vaibhav: Siehe meine Bearbeitung. –

+2

Sie sollten wirklich Großbuchstaben LL hier verwenden. – configurator

9

Sie hatten die richtige Idee mit long long int (oder unsigned long long int), aber die Warnung zu verhindern, müssen Sie den Compiler sagen, dass die Konstante ein long long int:

long long int value = 600851475143LL; 

Diejenigen " L "s können Kleinbuchstaben sein, aber ich würde davon abraten - abhängig von der Schriftart, ein Kleinbuchstabe" L "sieht oft viel wie eine Ziffer (" 1 ") statt.

4

Werfen Sie einen Blick auf die GNU MP Bignum Bibliothek http://gmplib.org/

+6

Weg, um eine Maus mit einer Elefantenpistole zu schießen. –

+1

Nun, aufgrund der Frage, wie der Titel der Frage geschrieben wurde, glaube ich, dass viele Elefantenjäger hier landen. – Doodad

Verwandte Themen