15:阶乘和
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
用高精度计算出S=1!+2!+3!+…+n!(n≤50)
其中“!”表示阶乘,例如:5!=5*4*3*2*1。
输入正整数N,输出计算结果S。
输入
- 一个正整数N。 输出
- 计算结果S。 样例输入
-
5
样例输出
-
153
来源
- NOIP1998复赛 普及组 第二题
-
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 using namespace std; 6 int a[10001]={1}; 7 int ans[100001]={0}; 8 char n[1001]; 9 int en[1001]; 10 int lans=1; 11 int la=1; 12 int x; 13 int main() 14 { 15 int n; 16 cin>>n; 17 int x=0; 18 for(int i=1;i<=n;i++)//寻找每一个数 19 { 20 memset(a,0,sizeof(a)); 21 a[0]=1; 22 for(int k=1;k<=i;k++)//求阶乘 23 { 24 for(int j=0;j<la;j++) 25 { 26 a[j]=a[j]*k+x; 27 x=a[j]/10; 28 if(x>0&&j==la-1) 29 la++; 30 a[j]=a[j]%10; 31 } 32 33 } 34 int l=0; 35 x=0; 36 while(l<=la||l<=lans) 37 { 38 ans[l]=ans[l]+a[l]+x; 39 x=ans[l]/10; 40 if(x>0) 41 lans++; 42 ans[l]=ans[l]%10; 43 l++; 44 } 45 } 46 int flag=0; 47 for(int i=lans;i>=0;i--) 48 { 49 if(ans[i]==0&&flag==0) 50 continue; 51 else flag=1; 52 cout<<ans[i]; 53 } 54 return 0; 55 }