按功能计算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);
}
答案 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
。不幸的是,动态变量无法做到这一点。