阶乘和(信息学奥赛一本通-T1173)
生活随笔
收集整理的这篇文章主要介绍了
阶乘和(信息学奥赛一本通-T1173)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
【题目描述】
用高精度计算出S=1!+2!+3!+…+n!(n≤50),其中“!”表示阶乘,例如:5!=5×4×3×2×1。
输入正整数n,输出计算结果S。
【输入】
一个正整数n。
【输出】
计算结果S。
【输入样例】
5
【输出样例】
153
【源程序】
#include<iostream> #include<cstring> using namespace std; int a[500],sum[500]; void mul(int x)//高精乘 {int i;for(i=1;i<=a[0];i++)a[i]*=x;for(i=1;i<=a[0];i++){a[i+1]+=a[i]/10;a[i]%=10;}i=a[0];while(a[i+1]>0)i++;a[0]=i;i=a[0];while(a[i]>10){a[i+1]+=a[i]/10;a[i]%=10;i++;}a[0]=i; } void add()//高精加 {int i;if(sum[0]>a[0])sum[0]=sum[0];elsesum[0]=a[0];for(i=1;i<=sum[0];i++){sum[i]+=a[i];sum[i+1]+=sum[i]/10;sum[i]%=10;}if(sum[sum[0]+1]>0)sum[0]+=1; } int main() {int n;int i;cin>>n;a[0]=1;a[1]=1;sum[0]=1;sum[1]=0;for(i=1;i<=n;i++){mul(i);//计算阶乘add();//计算阶乘和}for(i=sum[0];i>=1;i--)cout<<sum[i];cout<<endl;return 0; }
总结
以上是生活随笔为你收集整理的阶乘和(信息学奥赛一本通-T1173)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 多米诺骨牌(洛谷-P1282)
- 下一篇: 训练日志 2018.11.14