大数阶乘
计算大数的阶乘:
输入一个大数足够大,它的位数最大10000;
输出阶乘数的位数,及其它本身。
代码:
3
120
10
7
3628800
15
13
1307674368000
20
19
2432902817664
100
158
93326215443944152681699238856266704907159682643816214685929638952175999932299156
08941463976156518286253697920827223758251185210916864
#include<iostream>
#include<stdio.h>
#include<cmath>
using namespace std;
int main( )
{
int n;
while(cin>>n){
int i,j,c,w;
int m=0;
long a[10000];
memset(a,0,sizeof(a));
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;
}
if(c>0){
m++;
a[m]=c;
}
}
w=4*m+log10(a[m])+1;
printf("%d\n",w);
for(i=w-1;i>=0;i--) {
if(a[i]!=0)
printf("%ld",a[i]);
}
cout<<endl;
}
return 0;
}
输出结果:
第一行:n
第二行:阶乘的位数
第三行:阶乘数
5
3
120
10
7
3628800
15
13
1307674368000
20
19
2432902817664
100
158
93326215443944152681699238856266704907159682643816214685929638952175999932299156
08941463976156518286253697920827223758251185210916864
。。。