C++ 长变量不';我没有给出正确的答案

C++ 长变量不';我没有给出正确的答案,c++,integer-overflow,long-long,C++,Integer Overflow,Long Long,这是一些误算 我有很多麻烦。 此代码适用于一些较小的输入(N),但不适用于100000等输入 当N=100000时,result变量的正确最终答案必须是49999498 但此代码的结果是704982702 long long result = 0; int N; cin >> N; . . //some changes on result . result = result / 2; long long tmp =( N*(N - 1) ) / 2; result

这是一些误算

我有很多麻烦。 此代码适用于一些较小的输入(
N
),但不适用于
100000
等输入

N=100000
时,
result
变量的正确最终答案必须是
49999498
但此代码的结果是
704982702

long long result = 0;
int N;
cin >> N;
.
.          //some changes on result
.
result = result / 2;
long long tmp =( N*(N - 1) ) / 2;
result = tmp - result;
cout << result << endl;
我找不到原因。你知道吗

( N*(N - 1) ) / 2
在这个表达式中,一切都是
int
,因此结果在
int
中计算,并在计算
N*(N-1)
时溢出

(静态(N)*(N-1))/2
N
˙转换为
long
解决了这个问题,
long
int
乘法得到的
long
结果与预期的除法结果相同

( N*(N - 1) ) / 2
( static_cast<long long>(N)*(N - 1) ) / 2