Какой тип данных использовать для очень больших чисел в 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.

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

10
задан Eric Leschinski 10 August 2013 в 19:45
поделиться

3 ответа

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

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

Если вы оставите ll в конце литерала, то компилятор предположит, что вы хотите, чтобы это был 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)
}
28
ответ дан 3 December 2019 в 13:47
поделиться

Посмотрите на библиотеку GNU MP Bignum http://gmplib.org/

4
ответ дан 3 December 2019 в 13:47
поделиться

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

long long int value = 600851475143LL;

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

9
ответ дан 3 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: