【发布时间】:2020-05-29 16:19:24
【问题描述】:
我创建了这个简单的程序,使用 c 来计算组合。但是,每当我为变量“n”和“r”输入较大的值(如 20、30、40..)时,程序输出都是不正确的。但是这个程序适用于像 5,7,10 这样的小数字......我如何解决这个问题以找到组合,甚至为 n 和 r 输入大数字?
另外我想在这个程序中使用 nCr = n-1Cr + n-1Cr-1 规则,我正在使用 C 语言
#include <stdio.h>
int fact(int i){
if(i <= 1){
return 1;
}
return i * fact(i-1);
}
int nCr(int n,int r){
int nCr;
if(r == 0 || n == r){
nCr = 1;
}else{
nCr = (fact(n-1)/(fact(r) * fact(n-1-r))) + (fact(n-1)/(fact(r-1) * fact(n-r)));
}
return nCr;
}
int main(){
int n,r;
printf("Enter n : ");
scanf("%d",&n);
printf("Enter r : ");
scanf("%d",&r);
printf("nCr value : %d\n",nCr(n,r));
return 0;
}
非常感谢您的回答。
【问题讨论】:
-
阶乘增长非常迅速,对于您遇到问题的数字,它会溢出
int数据类型。 -
int fact(int i)只适用于fact(12)--> 479,001,600。
标签: c combinations ncr