我正在尝试寻找nCr值。没有错误,但我得到了1作为所有输入的答案。请帮我找出解决方案。
#include <stdio.h>
int fact(int num)
{
int f=1,i;
for(i=1;i<=num;i++)
{
f=f*1;
}
return f;
}
int main(void)
{
int n,r,ncr=0;
printf("\n enter n and r values");
scanf("%d%d",&n,&r);
ncr=(fact(n) / (fact(r) * fact(n-r)));
printf("\n ncr for %d and %d is %d",n,r,ncr);
return 0;
}发布于 2015-07-01 12:04:48
它不应该是f=f *1,而应该是f=f*i
发布于 2015-07-01 12:04:19
您的阶乘代码不正确。
您设置了f = 1,然后多次执行f = f * 1。然后返回仍然为1的f。我想你指的是f = f*i,对吧?
int fact(int num)
{
int f=1,i;
for(i=1;i<=num;i++)
{
f=f*i;
}
return f;
}发布于 2015-07-01 16:59:13
你计算阶乘的方法需要修正。应该是:
int fact(int num)
{
int f=1,i;
for(i=1;i<=num;i++)
{
f=f*i;
}
return f;
}此外,如果r> n,则不定义nCr。您应该在scanf调用之后添加此检查。
类似于:if (r > n) printf("r cannot be greater than n.")。
计算阶乘的一种更标准的形式是使用递归。
int fact(int num)
{
if (num == 1 || num == 0)
return 1;
else
return (num * fact(num - 1));
}https://stackoverflow.com/questions/31152318
复制相似问题