Cons. Marx 2021-07-26 18:15 采纳率: 92.3%
浏览 48
已结题

请问为什么半值是错的,(求组合数)

img
img
img

#include <stdio.h>

int f( int x );

int main ()
{
int body,head,left,right,m,n;
scanf("%d %d",&m,&n);
int a;
head = f(n);//求出分子部分
left = f(m);//求出分母部分的左边(m!)
a = n - m;
right = f(a);//求出分母部分的右边(n - m )!
body = left * right;//分母部分
printf("result = %d",head / body );
}
int f(int x)//对x进行阶乘
{
int i;
int sum=1;
for(i=1;i<=x;i++)
{
sum *= i;
}
return sum;
}

  • 写回答

2条回答 默认 最新

  • qfl_sdu 2021-07-26 18:25
    关注

    代码没啥问题,运行结果也没问题,m=3,n=6测试结果也没问题,是不是题目有问题。。。
    剩下的问题就是数据类型的问题了,题目要求范围在double范围内,所以,你的函数需要修改为double类型,代码修改如下:

    
    #include <stdio.h>
    
    double f( int x );
    
    int main ()
    {
        double body,head,left,right;
        int m,n;
        scanf("%d %d",&m,&n);
        int a;
        head = f(n);//求出分子部分
        left = f(m);//求出分母部分的左边(m!)
        a = n - m;
        right = f(a);//求出分母部分的右边(n - m )!
        body = left * right;//分母部分
        printf("result = %g",head / body );
        return 0;
    }
    double f(int x)//对x进行阶乘
    {
        int i;
        double sum=1;
        for(i=1;i<=x;i++)
        {
            sum *= i;
        }
        return sum;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月3日
  • 已采纳回答 7月26日
  • 请回答用户的提问 7月26日
  • 修改了问题 7月26日
  • 展开全部

悬赏问题

  • ¥20 keepalive配置业务服务双机单活的方法。业务服务一定是要双机单活的方式
  • ¥50 关于多次提交POST数据后,无法获取到POST数据参数的问题
  • ¥15 win10,这种情况怎么办
  • ¥15 如何在配置使用Prettier的VSCode中通过Better Align插件来对齐等式?(相关搜索:格式化)
  • ¥100 在连接内网VPN时,如何同时保持互联网连接
  • ¥15 MATLAB中使用parfor,矩阵Removal的有效索引在parfor循环中受限制
  • ¥20 Win 10 LTSC 1809版本如何无损提升到20H1版本
  • ¥50 win10 LTSC 虚拟键盘不弹出
  • ¥30 微信小程序请求失败,网页能正常带锁访问
  • ¥15 Matlab求解微分方程,如何用fish2d进行预优?