2010-08-29 16 views
10

Tengo que almacenar el número 600851475143 en mi programa. Traté de almacenarlo en long long int variable y long double también, pero en la recopilación que muestra el error¿Qué tipo de datos usar para un número muy grande en C++?

integer constant is too large for "long" type. 

También he intentado unsigned long long int también. Estoy usando MinGW 5.1.6 para ejecutar g ++ en Windows.

¿Qué tipo de datos debo usar para almacenar el número?

Respuesta

28

long long está bien, pero tiene que usar un sufijo en el literal.

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

Si deja el ll fuera de la final de la literal, entonces el compilador asume que usted quiere que sea un int, que en la mayoría de los casos es un número de 32 bits. 32 bits no son suficientes para almacenar ese gran valor, de ahí la advertencia. Al agregar ll, significa para el compilador que el literal debe interpretarse como long long, que es lo suficientemente grande como para almacenar el valor.

El sufijo también es útil para especificar qué sobrecarga solicitar para una función. Por ejemplo:

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

bien gracias, pero ¿alguien puede explicar por qué hacemos esto? ¿Qué sucede al agregar los literales? – Vaibhav

+0

@vaibhav: Ver mi edición. –

+2

Deberías usar mayúsculas LL aquí. – configurator

9

Usted tuvo la idea correcta con long long int (o unsigned long long int), pero para evitar la advertencia, es necesario decirle al compilador que la constante es una long long int:

long long int value = 600851475143LL; 

Los " Las letras L pueden ir en minúsculas, pero desaconsejaré que, dependiendo de la fuente, una minúscula "L" a menudo se parece mucho a un dígito ("1").

4

Tener un vistazo a la biblioteca GNU MP Bignum http://gmplib.org/

+6

Manera de disparar un ratón con un arma Elefante. –

+1

Bueno, debido a cómo se escribió el título de la pregunta, creo que mucha gente que caza elefantes termina aquí. – Doodad

Cuestiones relacionadas