首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找nCr值

查找nCr值
EN

Stack Overflow用户
提问于 2015-07-01 12:01:00
回答 4查看 104关注 0票数 0

我正在尝试寻找nCr值。没有错误,但我得到了1作为所有输入的答案。请帮我找出解决方案。

代码语言:javascript
复制
#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;
}
EN

回答 4

Stack Overflow用户

发布于 2015-07-01 12:04:48

它不应该是f=f *1,而应该是f=f*i

票数 3
EN

Stack Overflow用户

发布于 2015-07-01 12:04:19

您的阶乘代码不正确。

您设置了f = 1,然后多次执行f = f * 1。然后返回仍然为1f。我想你指的是f = f*i,对吧?

代码语言:javascript
复制
int fact(int num)
{
    int f=1,i;
    for(i=1;i<=num;i++)
    {
        f=f*i;
    }
    return f;
}
票数 2
EN

Stack Overflow用户

发布于 2015-07-01 16:59:13

你计算阶乘的方法需要修正。应该是:

代码语言:javascript
复制
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.")

计算阶乘的一种更标准的形式是使用递归。

代码语言:javascript
复制
int fact(int num)

{


  if (num == 1 || num == 0)

    return 1;

  else

    return (num * fact(num - 1));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31152318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档