2010-08-29 7 views
10

Devo memorizzare il numero 600851475143 nel mio programma. Ho cercato di conservare in long long int variabile e long double pure ma sulla compilazione mostra l'erroreQuale tipo di dati utilizzare per numeri molto grandi in C++?

integer constant is too large for "long" type. 

Ho anche provato unsigned long long int troppo. Sto usando MinGW 5.1.6 per eseguire g ++ su Windows.

Quale tipo di dati dovrei utilizzare per memorizzare il numero?

risposta

28

long long va bene, ma è necessario utilizzare un suffisso sul letterale.

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

Se si lascia l'll fuori alla fine del letterale, il compilatore presuppone che si desidera che sia un int, che nella maggior parte dei casi è un numero con segno a 32 bit. 32 bit non sono sufficienti per memorizzare quel valore elevato, quindi l'avviso. Aggiungendo lo ll, si indica al compilatore che il valore letterale deve essere interpretato come long long, che è abbastanza grande da memorizzare il valore.

Il suffisso è anche utile per specificare quale sovraccarico richiamare una funzione. Per esempio:

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

bene grazie, ma qualcuno mi può spiegare perché facciamo questo? cosa succede aggiungendo i letterali ?? – Vaibhav

+0

@vaibhav: Vedi la mia modifica. –

+2

Dovresti davvero usare LL maiuscolo qui. – configurator

9

Hai avuto l'idea giusta con long long int (o unsigned long long int), ma per evitare che il messaggio di avviso, è necessario dire al compilatore che la costante è una long long int:

long long int value = 600851475143LL; 

Quelli " L "s può essere minuscolo, ma io sconsiglio di farlo - a seconda del font, una" L "minuscola appare spesso come una cifra (" 1 ").

4

Dai un'occhiata alla libreria GNU MP bignum http://gmplib.org/

+6

Modo per sparare a un topo con una pistola Elephant. –

+1

Bene, a causa di come è stato scritto il titolo della domanda, penso che molte persone che cacciano elefanti finiscano qui. – Doodad

Problemi correlati