【发布时间】:2016-01-28 05:03:28
【问题描述】:
我编写了一个 C++ 函数来计算阶乘,并用它来计算 22C11(组合)。我已经声明了一个变量ans 并将其设置为0。我试图计算
22C11 = fact(2*n)/(fact(n)*fact(n))
我将n 发送为 11。出于某种原因,我在答案中存储了一个负值。我该如何解决这个问题?
long int fact(long int n) {
if(n==1||n==0)
return 1;
long int x=1;
if(n>1)
x=n*fact(n-1);
return x;
}
主函数中包含以下几行:
long int ans=0;
ans=ans+(fact(2*n)/(fact(n)*fact(n)));
cout<<ans;
我得到的答案是 -784 正确答案应该是705432
注意:此函数在 n
【问题讨论】:
-
正如我所说,我已经尝试过
long long int和long int,但它们不起作用。 -
嗯,这就是答案,要获得无效代码的帮助,您需要发布该代码
-
long long int通常为 64 位。22!是1124000727777607680000,至少需要 70 位。
标签: c++ algorithm factorial integer-overflow