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