我必须在我的程序中存储号码600851475143
。我尝试将其存储在long long int
变量和long double
中,但在编译时会显示错误
integer constant is too large for "long" type.
我也尝试了unsigned long long int
。我正在使用MinGW 5.1.6在Windows上运行g ++。
我应该使用什么数据类型来存储号码?
答案 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/