C语言求n的阶乘,哪里出错了,求大佬指点

如题所述

    把F函数中的fact=fact*1;改为fact=fact*i;。

    把主函数中的result=F(n)/F(m)*F(n-m);改为result=F(n)/F(m)/F(n-m);。

    建议在主函数中的scanf("%d%d",&m,&n);后加一句if(m<0 || n<0 || m<n) return 0;,以便输入错误时退出。

    int F(int m);和int F(int n);没有必要这样写,写一行int F(int);就可以了。

追问

按照上面的更改,交上答案 还是有一部分错误 请问哪里出错了呢

追答

我把你改过的代码敲过来,没有发现你说的m==n/2时的问题——

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-10-16
C语言是比较老式的语言。虽然C语言是比较老的语言,但是不学不行,所有的语言都以C语言为基础,进行升级而来。本回答被网友采纳
第2个回答  2021-10-17

这里显然应该是fact = fact * i不是*1

追问

改了之后还是不能通过提交,请问哪里出问题了

追答

你用F的方法必须考虑int值得范围,12!以上就溢出了,n不能超过11
逻辑正确与否和结果正确与否有很多运行时限制,改为long也许就可以了。而更好的编程算法就不能直接套用n!/m!(n-m)!这样的公式,而用中间过程值更小的数代替。你这种算法毫无优化,当然不行

第3个回答  2021-12-17
这个程序中有两个地方出错了,首先是计算阶层的部分循环当中,应该是乘以 i ,而不是乘以数字1。第二个是主程序中,如果这个程序是用来计算组合数的话,那么应该是分母上两个阶乘的乘积,必须要用圆括号括起来。