求10000以内n的阶乘

总时间限制: 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
原文地址:https://www.cnblogs.com/huashanqingzhu/p/6959011.html