它有些错误估计。
我遇到大量问题。
此代码适用于某些较小的输入(N
),但对于100000
之类的输入则不适用。
result
必须为N = 100000
时, 4999949998
变量的正确最终答案
但此代码的结果为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;
但是tmp
也很长,而且似乎没有溢出。
但是一些简单的改变使其正确。
long long result = 0;
int N;
cin >> N;
.
. //some changes on result
.
result = result / 2;
long long tmp = 0;
for (int i = 1; i < N; i++)
tmp += N;
tmp = tmp / 2;
result = tmp - result;
cout << result << endl;
我找不到原因。你知道吗?
答案 0 :(得分:4)
( N*(N - 1) ) / 2
我这个表达式,一切都是int
,因此结果会在int
中计算,并在计算N*(N - 1)
时溢出。
( static_cast<long long>(N)*(N - 1) ) / 2
转换N
˙到long long
解决问题,long long
多次int
给出long long
结果,正如预期的那样,对于除法也是如此。