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