因为要反复求解某数的阶乘,所以求解之前要记得使用memset将数组清零
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
long long a[30000],b[30000];
void jiecheng(int n, long long *a);
int n,i,j,carry;
cin>>n;
memset(a,0,sizeof(a));
jiecheng(n,a);
for(i=n-1;i>0;i--)
{
carry=0;memset(b,0,sizeof(b));
jiecheng(i,b);
for(j=1;j<=a[0];j++)
{
a[j]+=b[j]+carry;
carry =a[j]/10;
a[j]=a[j]%10;
}
while(carry)
{
a[0]++;
a[j]=carry%10;
carry/=10;
j++;
}
}
for(i=a[0];i>0;i--)
cout<<a[i];
cout<<endl;
system("PAUSE");
return 0;
}
void jiecheng(int n, long long *a)
{
long long carry,i;
int j;
for(i=1;i<=n;i++)
{
carry=0;
if(i==1)
{
a[0]=1;a[1]=1;
}
else
{
for(j=1;j<=a[0];j++)
{
a[j]=i*a[j]+carry;
carry = a[j]/10;
a[j]=a[j]%10;
}
while(carry)
{
a[0]++;
a[j]=carry%10;
carry/=10;
j++;
}
}
}
/*for(i=a[0];i>0;i--)
cout<<a[i];
cout<<endl;*/
}
posted on 2011-10-31 20:14
刘聪 阅读(538)
评论(0) 编辑 收藏 引用