总时间限制: 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 }