阶乘和
这题本来应该很容易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 }