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

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;
}

代码没啥问题,运行结果也没问题,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;
}

我前几天刚写到这个,哈哈