P1009 [NOIP1998 普及组] 阶乘之和
题目描述
用高精度计算出 =1!+2!+3!+⋯+!S=1!+2!+3!+⋯+n!(≤50n≤50)。
输入格式
一个正整数
n。
输出格式
一个正整数
S,表示计算结果。
输入输出样例
输入 #1复制
3
输出 #1复制
9
说明/提示
【数据范围】
对于
100% 的数据,
1≤n≤50
#include<bits/stdc++.h>
using namespace std;
int a[100000],r[100000];
void jia(int a1[],int b1[])
{
int i,x;
x=0;
a1[0]++;
for(i=1;i<=a1[0];i++){
a1[i]=a1[i]+b1[i]+x,
x=a1[i]/10,
a1[i]%=10;
}
while(a1[a1[0]]==0&&a1[0]>0) a1[0]--;
return ;
}
int main()
{
int n,i,j,l;
cin>>n;
a[0]=a[1]=1;
int x=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=a[0];j++){
a[j]=a[j]*i+x,x=a[j]/10,a[j]%=10;
}
while(x) a[++a[0]]=x%10,x/=10;
jia(r,a);
}
for(i=r[0];i>0;i--)
cout<<r[i];
return 0;
}
有没有把高精阶乘玩得比较懂的,来告诉我一下我为什么能只能拿到50分。