weixin_45857043
weixin_45857043
采纳率47.6%
2019-12-10 09:16 浏览 2.0k

【问题描述】 输入正整数吗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;
}
图片说明
求大佬指点哪错了?


  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答 默认 最新

  • zz00217 空白如空 2019-12-10 09:42

    注意下数据范围是多少,如果m太大需要用大整数处理
    试下使用long long行不行

    点赞 评论 复制链接分享
  • JonathanYan JonathanYan 2019-12-10 10:03

    也可以修改一下计算函数减少计算量防止溢出,不过既然题里都提示了用阶乘函数,应该用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;
    }
    
    点赞 评论 复制链接分享

相关推荐