您的位置:首页 > 其它

P1009 阶乘之和

2016-07-03 16:46 337 查看

P1009 阶乘之和

题目提供者洛谷OnlineJudge

标签数论(数学相关)高精1998NOIp提高组NOIp普及组

难度普及-

通过/提交1139/3791

提交该题 讨论 题解 记录

题目描述

用高精度计算出S=1!+2!+3!+…+n!(n≤50)

其中“!”表示阶乘,例如:5!=5*4*3*2*1。

输入输出格式

输入格式:

一个正整数N。

输出格式:

一个正整数S,表示计算结果。

输入输出样例

输入样例#1:

3


输出样例#1:

9


#include<iostream>
#include<cstring>
using namespace std;
int a[100000],n,i,j,x[100000],y[100000];
void add()//处理进位
{
memset(x,0,sizeof(x));
x[0]=max(y[0],a[0]);
for(i=1;i<=x[0];i++){x[i]+=y[i]+a[i],x[i+1]=x[i]/10,x[i]%=10;}
while(x[x[0]+1]>0){x[x[0]+2]=x[x[0]+1]/10,x[x[0]+1]%=10,x[0]++;}
y[0]=x[0];
for(i=1;i<=x[0];i++){y[i]=x[i];}
}
int main()
{
cin>>n;
a[0]=1,a[1]=1,y[0]=1,y[1]=0;
for(j=1;j<=n;j++)
{
memset(x,0,sizeof(x));//清空阶乘数组
x[0]=a[0];
for(i=1;i<=a[0];i++){x[i]+=a[i]*j,x[i+1]=x[i]/10,x[i]%=10;}//模拟阶乘
while(x[x[0]+1]>0){x[x[0]+2]=x[x[0]+1]/10,x[x[0]+1]%=10,x[0]++;}//加上阶乘
for(i=1;i<=x[0];i++){a[i]=x[i];}
a[0]=x[0];
add();
}
for(i=y[0];i>=1;i--){cout<<y[i];}//倒序存储就要倒序输出
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: