Я пытаюсь решить простой вопрос о Codeforces (круг № 1 вопрос А). Для 16-го тестового примера мой код получил -270385980
который должен быть 27126743055556
, но на моем локальном компьютере я могу получить правильный ответ. На моем компьютере я скомпилировал его в GCC 4.8, а на Codeforces я использовал GCC 4.7.
Как это может быть отрицательное число? Может ли кто-нибудь дать мне подсказку о том, что не так с моим кодом?
Вот мой код:
#include <iostream>
#include <cmath>
int main(int argc, char *argv[]) {
double m, n, a;
std::cin >> m >> n >> a;
long long res = static_cast<long>(ceil(m / a)) * static_cast<long>(ceil(n / a));
std::cout << res;
return 0;
}
Следующий номер: 27126743055556
должен быть представлен более 32 бит (длина long
на 32-битном процессоре), поэтому long
переполняется, и вы получаете отрицательное число.
Вы должны использовать long long
в литье.
static_cast<long long>(ceil(m / a))