【问题描述】 输入正整数吗m,n (m>n),计算从m个元素中任取n个元素的组合数。计算公式 提示:定义一个求阶乘的函数factorial(n),然后由main函数调用该函数。

【问题描述】  输入正整数吗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;
}