十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
有两个问题,一个是fact()函数里的p应该定义成double类型,第二个是printf()不应该用%d输出double类型的值,应该用%.0f或者%.0lf
创新互联公司是一家专业提供德兴企业网站建设,专注与网站制作、成都网站设计、HTML5建站、小程序制作等业务。10年已为德兴众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。
顺便说一句,这个问题只要定义fact()一个函数就够了,输出的时候用
printf("result = %.0f\n",fact(n)/(fact(m)*fact(n-m)));
另外两个函数删掉就可以了。
这个题目的数学公式可以简化,n比m小
判断n和m-n谁大,业绩是n是否大于m/2
这样可以计算,如果nm/2
m*(m-1)*...*(n+1)除以(m-n)*(m-n-1)*....*2
道理你该明白
double fact(long num)
{
for (long i = 1; num 0; num--)
{
i *= num;
}
}
int main()
{
long m;
long n;
long C;
scanf("%ld %ld", m, n);
C = fact(n) / ((fact(m)) * fact(n-m));
printf("%ld",C);
return 0;
}