c++ - 为什么 std::cout 输出溢出?

标签 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;
}

最佳答案

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

你应该在转换中使用long long

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

关于c++ - 为什么 std::cout 输出溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19289213/

相关文章:

C++ - 在父类中定义子类

c++ - OpenGL - 无法让相机工作

c++ - 是否可以调试最初由去除了符号的可执行文件生成的核心文件?

c++ - 如何使用 const_cast?

c++ - 没有已知的参数 1 从 ‘Image*’ 到 ‘const Image&’ 的转换

c++ - 无法将字符串转换为整数

c++ - ARRAYSIZE C++ 宏 : how does it work?

c++ - 以编程方式关闭共享文件

c++ - 为 const 引用和右值引用编写重载

c++ - 为什么我的输入文件的最后一行运行了两次?