总时间限制: 5000ms 内存限制: 655360kB
描述
求10000以内n的阶乘。
输入只有一行输入,整数n(0<=n<=10000)。输出一行,即n!的值。样例输入
100
样例输出
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
来源http://noi.openjudge.cn/ch0106/14/
1 #include<iostream>
2 #include<cstring>
3 using namespace std;
4 int n,y,i;
5 int a[100000],ay[100000];
6
7 int main()
8 {
9 cin>>n;
10 a[0]=1; //高精度数的位数
11 a[1]=1; //高精度整数1(逆向存储,位数放在数组第0个元素)
12 for(y=1;y<=n;y++)
13 {
14 memset(ay,0,sizeof(ay));
15 ay[0]=a[0];
16 for (i=1;i<=a[0];i++)
17 {
18 ay[i]+=a[i]*y;
19 ay[i+1]=ay[i]/10; //向高位进位
20 ay[i]%=10;
21 }
22 while(ay[ay[0]+1]>0) //向高位进位
23 {
24 ay[ay[0]+2]=ay[ay[0]+1]/10;
25 ay[ay[0]+1]%=10;
26 ay[0]++;
27 }
28 for(i=1;i<=ay[0];i++) a[i]=ay[i];
29 a[0]=ay[0];
30 }
31 for(i=a[0];i>=1;i--) cout<<a[i];
32 cout<<endl;
33 return 0;
34 }
View Code