繁体   English   中英

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

[英]Why std::cout output overflow?

我正在尝试解决有关Codeforces的简单问题( 第1轮问题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;
}

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

您应该在投放时使用long long

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM