如何计算c ++中的阶乘

时间:2014-11-08 07:38:50

标签: c++

按功能计算C ++中的阶乘

我写了这段代码:

int fact (int A)
{
int B ;
B= A*(A-1);
return B;
}


  int main ()
{
    int x;
    cout <<"Enter number to calulate its factorial :"<<endl;
        cin >> x ;
        cout << fac (x);

}

6 个答案:

答案 0 :(得分:0)

你有没有试过在发布之前谷歌吗?

int factorial(int n) 
{
    if (n < 0 ) {
        return 0;
    }
    return !n ? 1 : n * factorial(n - 1);
}

答案 1 :(得分:0)

你的事实函数只计算一次阶乘。你应该递归地做一些事情,如:

int fact (int A)
{
     if (A <= 1) {
         return 1;
     }
     return A*fact(A-1);
}

或者如果您想以迭代的方式进行,那么您应该执行以下操作:

int fact (int A)
{
    int B = 1, i = 2;
    for (; i<=A; i++) {
        B = B*i;
    }
    return B;
}

答案 2 :(得分:0)

为什么不用它来搜索它。

反正...

int n, count;
    unsigned long long int factorial=1;         
    cout<<"Enter an integer: ";
    cin>>n;
    if ( n< 0)
        printf("Error!!! Factorial of negative number doesn't exist.");
    else
    {
       for(count=1;count<=n;++count)    /* for loop terminates if count>n */
       {
          factorial*=count;              /* factorial=factorial*count */
       }
    cout<<factorial;
    }

答案 3 :(得分:0)

首先,这与C ++无关(正如你的问题所说)。这是alogorithms特有的,它们可以用于任何语言。

您可以使用以下示例作为参考。

int fact (int A)
{
     if (A == 0) {
         return 1;
     }
     return A*fact(A-1);
}

答案 4 :(得分:0)

int factorial (int a) {
    return a==0 ? 1 : a*factorial(a-1); 
}

答案 5 :(得分:-1)

由于您使用的是C ++而不是C语言,因此我只使用模板功能。对此的奖励:由于编译时的扩展/实现,您的代码将得到高度优化,并且基本上尽可能地固定,几乎没有开销:

// First the generic template for pretty much all numbers
template <unsigned int X>
unsigned int factorial() {
    return X * factorial<X - 1>();
}

// Now the specialization for the special case of 0
template <>
unsigned int factorial<0>() {
    return 1;
}

例如,要计算5的阶乘,您只需拨打factorial<5>()即可。启用优化后,只会生成120。不幸的是,动态变量无法做到这一点。