длинная длинная переменная не показывает правильный ответ

это какой-то просчет.

У меня проблемы с большими числами.
этот код работает для некоторых небольших входов (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

Решение

( N*(N - 1) ) / 2

Я это выражение, все intследовательно, результат рассчитывается в int и переполняется при расчете N*(N - 1),

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

Coverting Nв long long решает проблему, long long искалеченный int дает long long Результат, как и ожидалось, такой же для деления.

4

Другие решения


По вопросам рекламы [email protected]