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; }
相关文章推荐
- 快速构造json字符串
- LightOJ 1090 Trailing Zeroes (II) [分解]【数论】
- flex布局教程:实例
- Android开发工程目录结构简介
- 基于图像配准的图像特征检测之sift算法----sift算法总结
- 引水入城(codevs 1066)
- 使用adagio包解决背包问题
- CALayer 图层简介
- Python学习笔记6:Python序列
- 二叉树的层次遍历----java实现
- iOS --- 扩展和泛型(swift2.3)
- 图的连通性问题之强连通分量初步
- jsp前3章试题分析
- NSURLConnection简单使用
- pyqt 加载资源文件
- Git push出错
- Vigenère 密码(luogu 1079)
- storyboard文件的认识
- Flex 布局教程:语法篇
- 【NOIP2015TGD2T1】poj3258 River Hopscotch