【问题描述】 输入正整数吗m,n (m>n),计算从m个元素中任取n个元素的组合数。计算公式 提示:定义一个求阶乘的函数factorial(n),然后由main函数调用该函数。
问题描述:
#include
int factorial(int a)
{
int s=1,i;
for(i=a;i>0;i--)
{
s=s*i;
}
return s;
}
int main(int argc, char *argv[])
{
int m,n;
scanf("%d %d",&m,&n);
printf("%d",factorial(m)/(factorial(n)*factorial(m-n)));
return 0;
}
求大佬指点哪错了?
答
注意下数据范围是多少,如果m太大需要用大整数处理
试下使用long long行不行
答
也可以修改一下计算函数减少计算量防止溢出,不过既然题里都提示了用阶乘函数,应该用longlong就可以解决。
long long int C(int m, int n){
int k = ( m - n > n ) ? n : m-n;
long long int result = 1;
for(int i = 0; i < n; i++){
result = result * ( m - i ) / ( 1 + i );
}
return result;
}