そのいくつかの誤算。
数が多くて困っています。このコードは、いくつかの小さなinputs( 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;
理由がわかりません。知っていますか?