阶乘和
链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1173
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
用高精度计算出S=1!+2!+3!+…+n!(n≤50),其中“!”表示阶乘,例如:5!=5*4*3*2*1。
输入正整数N,输出计算结果S。
【输入】
一个正整数N。
【输出】
计算结果S。
【输入样例】
5
【输出样例】
153
题解:求阶乘+高精度算法
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=5e4+5; int a[maxn],c[maxn]; int main(){ int n,x=1,l=0,k=0,L=0; c[0]=1; cin>>n; while(x<=n){ k=0; for(int i=0;i<=l;i++){ c[i]=k+c[i]*x; k=c[i]/10; c[i]%=10; if(k>0&&i>=l)l++; } x++; L=max(L,l); for(int i=0;i<=L;i++) if((a[i]=c[i]+a[i])>=10) { a[i+1]++;a[i]-=10; } } for(int i=l;i>=0;i--)cout<<a[i]; cout<<endl; return 0; }