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

C++ 为什么std::cout输出溢出?,c++,C++,我试图解决关于Codeforces()的简单问题。对于第16个测试用例,我的代码得到了-270385980,应该是2712674305556,但是在我的本地计算机上我可以得到正确的答案。在我的计算机上,我用GCC4.8编译它,在Codeforces上,我用GCC4.7 怎么可能是负数?谁能告诉我我的代码有什么问题吗 这是我的密码: #include <iostream> #include <cmath> int main(int argc, char *argv[])

我试图解决关于Codeforces()的简单问题。对于第16个测试用例,我的代码得到了
-270385980
,应该是
2712674305556
,但是在我的本地计算机上我可以得到正确的答案。在我的计算机上,我用GCC4.8编译它,在Codeforces上,我用GCC4.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;
}
#包括
#包括
int main(int argc,char*argv[]){
双m,n,a;
标准:cin>>m>>n>>a;
long-long-res=静态演员阵容(ceil(m/a))*静态演员阵容(ceil(n/a));

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

您应该在铸造中使用
long

static_cast<long long>(ceil(m / a))
static_cast(天花板(m/a))

你提供的是什么输入?这是一个codeforce的东西,我怀疑他知道。但他的问题几乎肯定与整数溢出有关。@user1166140,发生的情况是,
long
long
在你的计算机上是64位值,但在测试计算机上是32位值。请重试,但这次使用
>int64\u t
。@OmnipotentEntity-
long
要求至少64位宽。@PeteBecker,实际上不是。请参见N3337的4.13.1,也请参见4.5.2和4.5.3,其中它们明确提出了
long-long
类型可能无法容纳
char32\u t
wchar\t
的可能性>,
char16\u t
或可枚举类型。谢谢Alex,它可以工作!因此,如果乘法器是长类型,结果也是长类型,因此在codeforce网站上它溢出了(codeforce机器上的长类型可能是32位?)。即使我使用长类型变量捕捉结果,它也只能得到溢出的结果。