題目描述
用高精度計算出S=1!+2!+3!+?+n!(n≤50)。
其中?!
?表示階乘,定義為 n!=n×(n?1)×(n?2)×?×1。例如,5!=5×4×3×2×1=1205!=5×4×3×2×1=120。
輸入格式
一個正整數?n。
輸出格式
一個正整數?S,表示計算結果。
輸入輸出樣例
輸入 #1
3
輸出 #1
9
思路
先算階乘,然后用高精度算和,最后輸出
#include <bits/stdc++.h>
using namespace std;
int a[101],sum[101],n,t;
int main()
{cin>>n;a[0]=sum[0]=1;for(int i=2;i<=n;i++){for(int j=0;j<100;j++){a[j]*=i;}for(int j=0;j<100;j++){t+=a[j];a[j]=t%10;t/=10;}for(int j=0;j<100;j++){sum[j]+=a[j];t+=sum[j];sum[j]=t%10;t/=10;}}int k;for(k=99;k>0&&sum[k]==0;k--);for(int i=k;i>=0;i--) cout<<sum[i];return 0;
}