luogu P1009 阶乘之和
题目描述
用高精度计算出S=1!+2!+3!+…+n!(n≤50)
其中“!”表示阶乘,例如:5!=5*4*3*2*1。
输入输出格式
输入格式:
一个正整数N。
输出格式:
一个正整数S,表示计算结果。
输入输出样例
输入样例#1:
3
输出样例#1:
9
就当复习下高精度
#include<map> #include<queue> #include<stack> #include<cstdio> int ans[2000] = {1}; int num[2000] = {1}; int l=1; int miku; using namespace std; void gaojing(int x) { miku=0; for(int i=0;i<l;) { num[i]=num[i]*x+miku; miku=num[i]/10; num[i++]%=10; if(i==l&&miku)l++; } for(int i=0;i<l;i++)ans[i]+=num[i]; } int main() { int n; scanf("%d",&n); for(int i=2;i<=n;i++) { gaojing(i); } for(int i=0;i<l;) { ans[i+1]+=ans[i]/10; ans[i++]%=10; if(i==l&&ans[i])l++; } for(int i=l-1;i>=0;i--) printf("%d",ans[i]); return 0; }