Код: Выделить всё
long long ans = n * n;
Код: Выделить всё
long long temp = (n - i - 1) * (n - i - 1);
Код: Выделить всё
int
Я использую значения n и i в некоторой задаче оптимизации, и когда n велико (например, до 10^12), умножение (n - i - 1) может переполнить ограничение на 32-битное целое число.
Я был бы признателен, если бы кто-нибудь разъяснил:
Почему первый случай работает, даже если n * n может переполнить int?
Почему во втором случае возникают проблемы с большими значениями n - i - 1?
Как использование 1LL решает эту проблему?
Когда я заменяю второй случай с:
Код: Выделить всё
long long temp = 1LL * (n - i - 1) * (n - i - 1);
< /code>
Это работает нормально. Но я не понимаю, почему исходное выражение с использованием просто int для умножения (без 1ll
Подробнее здесь: https://stackoverflow.com/questions/793 ... mp-n-i-1-n