Какой тип данных использовать для очень больших чисел в С++?
Мне нужно сохранить номер 600851475143
в моей программе. Я попытался сохранить его в переменной long long int
и long double
, но при компиляции она показывает ошибку
integer constant is too large for "long" type.
Я тоже пробовал unsigned long long int
. Я использую MinGW 5.1.6 для запуска g++ в Windows.
Какой тип данных следует использовать для хранения номера?
Ответы
Ответ 1
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)
}
Ответ 2
У вас была правильная идея с long long int
(или unsigned long long int
), но для предотвращения предупреждения вам нужно сообщить компилятору, что константа является long long int
:
long long int value = 600851475143LL;
Те "L" могут быть в нижнем регистре, но я бы посоветовал это сделать - в зависимости от шрифта, нижний регистр "L" часто выглядит как одна цифра ( "1" ).
Ответ 3
Посмотрите библиотеку GNU MP Bignum http://gmplib.org/