求n的阶乘,n可以无限大,该怎样解决这个问题???
求n的阶乘,n可以无限大,该怎样解决这个问题???希望可以给个思路或者代码,很感激!!!
[ 本帖最后由 water95 于 2015-6-23 09:18 编辑 ]
程序代码:#include <iostream>
#include <iomanip>
using namespace std;
int factorial(int n);
int factorial1(int n);
int main()
{
cout << setfill('0')<< setw(4) << 0 << endl;
printf("%4.4ld",0);
int i;
for(i = 20; i <21; i++)
{
std::cout << i << " ";
factorial(i);
std::cout << " ";
factorial1(i);
std::cout<< std::endl;
}
return 0;
}
int factorial(int n)
{
const int baseNum = 10000;
if( n < 0 )
return n;
if( n <= 1 )
return 1;
long a[100];
int num_a = 0;
int carry = 0; // 进位
int i, j;
a[0] = 1;
for(i = 1; i <= n; i++)
{
carry = 0;
for(j = 0; j <= num_a; j++)
{
a[j] = a[j] * i + carry;
carry = a[j] / baseNum;
a[j] %= baseNum;
}
if(carry > 0)
{
num_a++;
a[num_a] = carry; // 进位存入数组下一个单元中
}
}
for(i = num_a; i >=0; i--)
std::cout << setw(4) << a[i];
return 1;
}
int factorial1(int n)
{
long a[10000];
int i,j,c,m=0;
a[0]=1;
for(i=1;i<=n;i++)
{
c=0;
for(j=0;j<=m;j++)
{
a[j]=a[j]*i+c;
c=a[j]/10000;
a[j]=a[j]%10000;
}
// printf("\n");
if(c>0)
{
m++;
a[m]=c;
}
}
printf("%ld",a[m]);
for(i=m-1;i>=0;i--)
printf("%4.4ld",a[i]);
// return w;
}