我正在尝试解决关于 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/