为什么std :: cout输出溢出?

时间:2013-10-10 07:07:12

标签: c++

我正在尝试解决关于 Codeforces round#1 question A)的简单问题。对于第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;
}

1 个答案:

答案 0 :(得分:2)

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

你应该在投射中使用long long

static_cast<long long>(ceil(m / a))