【发布时间】:2017-10-29 20:49:33
【问题描述】:
我使用两种方法来计算二项式系数。 一个是
int fac(int n) {
if ( n < 2 ) return 1; // return 1 when n=0,1
int ret = 1;
for(int i=2; i <= n; ++i)
ret *= i; // calculate factorial
return ret;
}
int choose_fac(int n, int k) {
return fac(n)/fac(k)/fac(n-k);
}
另一个是:
int choose_dp(int n, int k) {
int C[n+1][k+1];
int i, j;
for (i = 0; i <= n; i++) {
for (j = 0; j <= min(i, k); j++) {
if (j == 0 || j == i) C[i][j] = 1;
else C[i][j] = C[i-1][j-1] + C[i-1][j];
}
}
return C[n][k];
}
所以当我在 (15,5) 上运行时,第二个给出正确答案,而第一个给出 4。我知道对于 choose_fac,int 在计算 15 时超出范围!但如果这是原因,为什么choose_dp没有返回错误的答案,因为它们都使用int来定义函数?
非常感谢!
E.
【问题讨论】:
-
好吧,
choose_dp不计算 15!。只是因为 n!不能表示为int并不意味着 nCk 不能表示为int。
标签: c++ int range long-integer