洛谷【P1009】阶乘之和
题目传送门:https://www.luogu.org/problemnew/show/P1009
高精度加法:https://www.cnblogs.com/AKMer/p/9722610.html
之所以在运算法则这个分组的最后一篇博客写这道题是因为之前没写过高精乘低精,也没讲过压位。
所谓压位,就是每一位不只存一位数,比如\(1000009\)分成\(1\)和\(0\)和\(9\)来存,就只需要三位就能存了。然后\(10\)进制改成\(1000\)进制就行了。
时间复杂度:\(O(len^2)\)
空间复杂度:\(O(len)\)
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int pps=1000;
int n;
int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
}
struct Bignum {
int num[54];
void clear() {
memset(num,0,sizeof(num));
num[0]=num[1]=1;
}
Bignum operator*(const int &a)const {
Bignum c;memset(c.num,0,sizeof(c.num));
c.num[0]=num[0];
for(int i=1;i<=num[0];i++) {
c.num[i]+=num[i]*a;
c.num[i+1]+=c.num[i]/pps;
c.num[i]%=pps;
}
if(c.num[c.num[0]+1])c.num[0]++;
return c;
}//高精乘低精
Bignum operator+(const Bignum &a)const {
Bignum c;memset(c.num,0,sizeof(c.num));
c.num[0]=max(num[0],a.num[0]);
for(int i=1;i<=c.num[0];i++) {
c.num[i]+=num[i]+a.num[i];
c.num[i+1]+=c.num[i]/pps;
c.num[i]%=pps;//pps进制,直接强上就行了。
}
if(c.num[c.num[0]+1])c.num[0]++;
return c;
}
void print() {
printf("%d",num[num[0]]);
for(int i=num[0]-1;i>0;i--)
printf("%03d",num[i]);//记得不足3为前导补0
}
}ans;
int main() {
n=read();
for(int i=1;i<=n;i++) {
Bignum res;res.clear();
for(int j=1;j<=i;j++)
res=res*j;//算阶乘
ans=ans+res;//累加
}ans.print();
return 0;
}
洛谷【P1009】阶乘之和的更多相关文章
- 洛谷——P1009 阶乘之和
P1009 阶乘之和 题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一 ...
- 洛谷P1009 阶乘之和 题解
想看原题请点击这里:传送门 看一下原题: 题目描述 用高精度计算出S=!+!+!+…+n! (n≤) 其中“!”表示阶乘,例如:!=****××××. 输入格式 一个正整数N. 输出格式 一个正整数S ...
- Java实现 洛谷 P1009 阶乘之和
import java.util.Scanner; public class 阶乘之和 { public static void main(String[] args) { Scanner sc = ...
- 洛谷 P1009 阶乘之和 Label:高精度
题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一个正整数S,表示计算结 ...
- 洛谷 P1009 阶乘之和
题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一个正整数S,表示计算结 ...
- P1009 阶乘之和
P1009 阶乘之和 题目提供者洛谷OnlineJudge 标签数论(数学相关)高精1998NOIp提高组NOIp普及组 难度普及- 通过/提交1139/3791 提交该题 讨论 题解 记录 题目描述 ...
- AC日记——阶乘之和 洛谷 P1009(高精度)
题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一个正整数S,表示计算结 ...
- P1009 阶乘之和 洛谷
https://www.luogu.org/problem/show?pid=1009 题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=54321. ...
- 【洛谷】P1009阶乘之和
题目链接:https://www.luogu.org/problemnew/show/P1009 题意:给一个整数n(n<50),求$ \sum^{n}_{i=1} i! $ 题解:我..拿py ...
- 【洛谷】P1009 阶乘之和——高精度算法
题目描述 用高精度计算出S = 1! + 2! + 3! + - + n! ( n ≤ 50 ) S = 1! + 2! + 3! + - + n! ( n ≤ 50 ) 其中"!&qu ...
随机推荐
- windowsphone8.1学习笔记之应用数据(四)
应用数据的存储格式常用的分为json和xml两种(其实我都想略过这个地方的,json我一直用的是json.net,而wp上操作xml的方式与其他相比也没太多变化). 先说说json数据存储,关于jso ...
- C++, Java和C#的编译、链接过程解析
总是感觉java是解释性语言,转载下一篇感觉写的容易理解的文章 转自 http://www.cnblogs.com/rush/p/3155665.html 1.1.1 摘要 我们知道计算机不能直接理解 ...
- [IOI2018]组合动作
IOI2018 组合动作 UOJ 首先显然可以两次试出首字母 考虑增量构造 假设首字母为A,且已经试出前i个字母得到的串s 我们考虑press这样一个串s+BB+s+BX+s+BY+s+XA 首先这个 ...
- activiti 基础搭建
首先在eclipse内添加activiti的插件,https://blog.csdn.net/qq_22701869/article/details/79537971 1.创建一个maven的java ...
- uCGUI 按键窗口切换机制(更新篇)
在之前文章中,讲述了一个低内存使用量的的窗口切换机制.有人会问,低内存使用量是多低呢,我这里举个例子.我有一个项目中使用到本切换机制,128*64的单色屏,初步计算有105个窗口(后面还会增加),总内 ...
- android OTG【转】
本文转载自:http://blog.csdn.net/xubin341719/article/details/7707056 一.OTG的概念 OTG是On-The-Go的缩写,是近年发展起来的技术, ...
- Docker 镜像篇
镜像是 Docker 容器的基石,容器是镜像的运行实例,有了镜像才能启动容器. docker两个跟镜像有关的命令: hello-world - 最小的镜像 hello-world 是 Docker 官 ...
- LINQ 学习路程 -- 查询操作 Expression Tree
表达式树就像是树形的数据结构,表达式树中的每一个节点都是表达式, 表达式树可以表示一个数学公式如:x<y.x.<.y都是一个表达式,并构成树形的数据结构 表达式树使lambda表达式的结构 ...
- 算法(Algorithms)第4版 练习 2.2.23
测试结果: 算法(Algorithms)第4版 练习 2.2.10 算法(Algorithms)第4版 练习 2.2.11(1) 算法(Algorithms)第4版 练习 2.2.11(2) 算法(A ...
- Hive split分割后获取最后一段
----------------------------------------- 如果只看解决方法,直接看最后... ---------------------------------------- ...