首页 > 代码库 > 15:阶乘和

15:阶乘和

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 }

 

15:阶乘和