我需要在程序中使用高数字。这是显示问题的最小示例。它只是读入一个数字并再次给出数字。
using namespace std;
#include <iostream>
#include <stdlib.h>
int main(int argc, char* argv[])
{
double
N = atoi(argv[1]);
cout << N << endl;
return 0;
}
一切正常,直到10 ^ 9如果我输入10 ^ 10作为输入,结果是1.41007e + 09。我只是不知道为什么会这样。我已经尝试了以下内容:
答案 0 :(得分:2)
当结果值超出atoi
的边界(即大于int
或小于INT_MAX
)时,使用INT_MIN
会导致未定义的行为。
这是不使用atoi
的好理由。来自C库的备选strtol
和strtoul
具有针对所有输入的明确定义的行为。
C ++ 11函数std::stoi
也有明确定义的行为(如果值超出范围,则抛出异常)。 istream::operator>>(int&)
也是明确定义的,但它有一些挑剔的细节,这些细节与流不能向前看&#34;。
答案 1 :(得分:0)
在大于INT_MAX的数字上使用atoi将导致结果值从负值INT_MIN开始。
尝试使用环礁功能。它在 。但这是在C ++ 11中定义的。因此,如果您的编译器不是最新的,那么它将引发错误。
如果该值再次非常大(大于8个字节),那么我建议您使用外部库。
答案 2 :(得分:-1)
输入10 ^ 10超出整数的最大限制2147483648且10 ^ 9完全在限制范围内。
以下代码非常有用。
using namespace std;
#include <iostream>
#include <stdlib.h>
int main(int argc, char* argv[])
{
long long N = atoll (argv[1]);
cout << N << endl;
return 0;
}