0

我正在尝试解决关于Codeforces的简单问题(第 1 轮问题 A)。对于第 16 个测试用例,我的代码得到了-270385980which should be 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;
}
4

1 回答 1

2

以下数字 :27126743055556需要超过 32 位(long在 32 位处理器上的长度)才能表示,因此long溢出并且您得到一个负数。

你应该long long在铸造中使用。

static_cast<long long>(ceil(m / a))
于 2013-10-10T07:13:06.760 回答