我在一个项目中工作,在某个时间我遇到了这个问题。我有两个非常大的数字,我想分割它们并得到一个整数/长整数。这就是发生的事情:
代码
#include <iostream>
using namespace std;
int main(){
long long n,m;
cin >> n >> m;
cout << n/m << endl;
}
输入可以是数字,直到100,000,000,000,000,000,因此该部门执行错误。
输出
#1 n: 76543210987654321 m: 7654321
#2 76543210987654321/7654321 = 1410312449
正确答案是10,000,000,130所以我想知道发生了什么......
答案 0 :(得分:3)
正确的结果既不是1410312449
也不是10000000130
。它等于10000000129
至少这是GCC在www.ideone.com上展示的内容。你可以亲自试试。
#include <iostream>
int main()
{
long long n = 76543210987654321;
long long m = 7654321;
std::cout << n / m << std::endl;
return 0;
}
似乎您将操作的结果放在int
类型的对象中。请考虑以下代码
#include <iostream>
int main()
{
long long n = 76543210987654321;
long long m = 7654321;
int x;
x = n / m;
std::cout << n / m << std::endl;
std::cout << x << std::endl;
return 0;
}
输出
10000000129
1410065537
答案 1 :(得分:2)
看来,除法的结果被截断为32位值(int
)。
尝试通过long long
使用显式转换为static_cast
。
另外,在编译器上知道sizeof(long long)
的结果很有趣。