【发布时间】:2013-10-10 07:07:11
【问题描述】:
我正在尝试解决 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;
}
【问题讨论】:
-
你提供什么输入?
-
这是一个 codeforce 的东西,我怀疑他知道。但他的问题几乎可以肯定与整数溢出有关。
-
@user1166140,您的计算机上的
long long或long是 64 位值,但在测试计算机上它是 32 位值。再试一次,但这次改用int64_t。 -
@OmnipotentEntity -
long long至少需要 64 位宽。 -
@PeteBecker,实际上不是。参见 N3337 的 4.13.1,也参见 4.5.2 和 4.5.3,它们明确提出了
long long类型可能无法容纳char32_t、wchar_t、char16_t或可枚举类型的可能性.
标签: c++