Какой тип данных использовать для очень больших чисел в C++?

Я должен сохранить номер 600851475143 в моей программе. Я пытался сохранить его в long long int переменной и long double также, но при компиляции он показывает ошибку

integer constant is too large for "long" type. 

Я также пробовал unsigned long long int тоже. Я использую MinGW 5.1.6 для запуска g++ в windows.

какой тип данных я должен использовать, чтобы сохранить номер?

3 ответов


long long отлично, но вы должны использовать суффикс на литерале.

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

если вы оставите ll off конец литерала, то компилятор предполагает, что вы хотите, чтобы он был int, который в большинстве случаев представляет собой 32-битовое число. 32-бит недостаточно для хранения этого большого значения, поэтому предупреждение. Добавив ll, вы указываете компилятору, что литерал должен интерпретироваться как long long, который достаточно большой, чтобы сохранить значение.

в суффикс также полезен для указания, какую перегрузку вызывать для функции. Например:

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

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

у вас была правильная идея с long long int (или unsigned long long int), но чтобы предотвратить предупреждение, вам нужно сообщить компилятору, что константа является long long int:

long long int value = 600851475143LL;

эти " L "могут быть строчными, но я бы не советовал-в зависимости от шрифта, строчный" L"часто выглядит как одна цифра ("1") вместо этого.


взгляните на библиотеку GNU MP Bignum http://gmplib.org/