阶乘和

阶乘和

这题本来应该很容易AC的,没想到提交了好几次。

基本思路可以参考 求10000以内n的阶乘

我发现常量N如果不到10000!的量级,就会报运行时错误(指数组溢出等)。

也就是说很可能它拿你这个做了10000的阶乘和。

但是题目里明明写着n<=50,o(╥﹏╥)o!(而且这个程序也没有做10000阶乘和的能力

 1 #include<iostream>
 2 #include<cstring>
 3 
 4 using namespace std;
 5 const int N=36000;
 6 
 7 void factorial(int n,int a[]){
 8     for(int i=1;i<=n;i++){
 9         int carry=0;
10         for(int j=1;j<=a[0];j++){
11             int tmp=a[j]*i+carry;
12             a[j]=tmp%10;
13             carry=tmp/10;
14         }
15         //处理最高位
16         while(carry){
17             a[0]++;
18             a[a[0]]=carry%10;
19             carry/=10;            
20         }
21     }
22 }
23 int main(){
24     int n,a[N],ans[N];
25     memset(ans,0,sizeof(ans));
26     cin>>n;
27     for(int i=1;i<=n;i++){
28         memset(a,0,sizeof(a));
29         a[0]=a[1]=1;
30         factorial(i,a);
31         ans[0]=a[0];
32         for(int j=1;j<=a[0];j++){
33             ans[j+1]+=(ans[j]+a[j])/10;
34             ans[j]=(ans[j]+a[j])%10;
35         }
36         //处理结果
37         if(ans[ans[0]+1])ans[0]++;
38     }
39     //输出结果
40     for(int i=ans[0];i>0;i--){
41         cout<<ans[i];
42     }
43     return 0;
44 }

 

posted @ 2021-08-01 11:42  Rekord  阅读(194)  评论(0编辑  收藏  举报