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

时间:2010-08-29 15:05:50

标签: c++ types largenumber

我必须在我的程序中存储号码600851475143。我尝试将其存储在long long int变量和long double中,但在编译时会显示错误

integer constant is too large for "long" type. 

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

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

3 个答案:

答案 0 :(得分:28)

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)
}

答案 1 :(得分:9)

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

long long int value = 600851475143LL;

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

答案 2 :(得分:4)

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