-1

它的一些误判。

我遇到了大数字的麻烦。此代码适用于一些较小的输入(N),但100000不适用于类似的输入。

result变量when N = 100000must be 4999949998 but result in this code的正确最终答案是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;

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

4

1 回答 1

4
( N*(N - 1) ) / 2

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

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

N覆盖˙to解决long long问题,long long乘以一个int给出long long结果,正如预期的那样,除法相同。

于 2015-08-14T08:49:27.017 回答