题目描述
用高精度计算出 S=1!+2!+3!+⋯+n!(n≤50)。
其中 !
表示阶乘,定义为 n!=n(n−1)×(n−2)×⋯×1例如,5!=5×4×3×2×1=120.
输入格式
一个正整数 n。
输出格式
一个正整数 S,表示计算结果。
一开始的我认为这道题很简单,自信满满敲出代码。
#include <iostream>
using namespace std;
int main()
{
int n,cnt,x=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cnt=1;
for(int j=i;j>=1;j++)
{
cnt*=j;
}
x+=cnt;
}
cout<<x;
}
然后就直接TLE了……仔细观察后:
于是……
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[1005]={0},b[1005]={0},n;
cin>>n;
a[0]=b[0]=1;
for (int i=2;i<=n;i++){
for (int j=0;j<100;j++)
b[j]*=i;
for (int j=0;j<100;j++)
if (b[j]>9){
b[j+1] += b[j]/10;
b[j]%=10;
}
for (int j=0;j<100;j++){
a[j]+=b[j];
if (a[j]>9) {
a[j+1] += a[j]/10;
a[j]%=10;
}
}
}
for (i=100;i>=0&&A[i]==0;i--);
for (j=i;j>=0;j--) cout<<a[j];
return 0;
}