long long变量没有显示正确的答案

时间:2015-08-14 08:47:15

标签: c++ integer-overflow long-long

它有些错误估计。

我遇到大量问题。 此代码适用于某些较小的输入(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;

我找不到原因。你知道吗?

1 个答案:

答案 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结果,正如预期的那样,对于除法也是如此。