在C++中使用哪种数据类型用于非常大的数字?

Vai*_*hav 10 c++ types largenumber

我必须将号码存储600851475143在我的程序中.我试图将它存储在long long int变量中,long double但是在编译时它会显示错误

integer constant is too large for "long" type. 
Run Code Online (Sandbox Code Playgroud)

我也试过unsigned long long int了.我正在使用MinGW 5.1.6在Windows上运行g ++.

我应该使用什么数据类型来存储号码?

Pet*_*der 28

long long 很好,但你必须在文字上使用后缀.

long long x = 600851475143ll; // can use LL instead if you prefer.
Run Code Online (Sandbox Code Playgroud)

如果你离开ll文字的末尾,那么编译器假定你想要它是一个int,在大多数情况下是一个32位有符号数.32位不足以存储那么大的值,因此警告.通过添加ll,您向编译器表明文字应该被解释为a 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)
}
Run Code Online (Sandbox Code Playgroud)

  • 你真的应该在这里使用大写LL. (2认同)

Jer*_*fin 9

你有正确的想法long long int(或unsigned long long int),但为了防止警告,你需要告诉编译器常量是long long int:

long long int value = 600851475143LL;
Run Code Online (Sandbox Code Playgroud)

那些"L"可以是小写的,但我建议反对它 - 取决于字体,小写的"L"通常看起来很像一位数("1").


Pie*_*rre 5

看看 GNU MP Bignum 库http://gmplib.org/

  • 用大象枪射击老鼠的方法。 (7认同)