【洛谷】P1009 阶乘之和——高精度算法
题目描述
用高精度计算出S = 1! + 2! + 3! + … + n! ( n ≤ 50 ) S = 1! + 2! + 3! + … + n! ( n ≤ 50 )
其中“!”表示阶乘,例如:5! = 5 × 4 × 3 × 2 × 1
输入格式
一个正整数NN。
输出格式
一个正整数S,表示计算结果。
输入输出样例
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int res[100010], p[100010];///res存放结果, p存放阶乘结果
int len0, len1;///len0维护res长度,len1维护p长度
void Plus()
{
int len = max(len0, len1);
for(int i = 0; i < len; i++){
res[i] = res[i] + p[i];
res[i+1] += res[i]/10;
res[i] = res[i]%10;
if(res[i] && i >= len0)len0++;
}
} void Multi(int a)
{ for(int i = 0; i < len1; i++)p[i] *= a;
for(int i = 0; i < len1; i++){
p[i+1] += p[i]/10;
p[i] = p[i]%10;
if(p[i+1] && i+1 >= len1)len1++;
}
}
int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
memset(res, 0, sizeof(res));
memset(p, 0, sizeof(p));
res[0] = 0;
len0 = len1 = p[0] = 1;
for(int i = 1; i <= n; i++)
{
Multi(i);
Plus();
}
for(int i = len0-1; i >= 0; i--)printf("%d", res[i]);
printf("\n");
}
}
在乘法中,需要维护的是每次阶乘结果p的长度len1
每当进位的时候就需要对len1加1
void Multi(int a)
{ for(int i = 0; i < len1; i++)p[i] *= a;
for(int i = 0; i < len1; i++){
p[i+1] += p[i]/10;
p[i] = p[i]%10;
if(p[i+1] && i+1 >= len1)len1++;
}
}
void Plus()
{
int len = max(len0, len1);
for(int i = 0; i < len; i++){
res[i] = res[i] + p[i];
res[i+1] += res[i]/10;
res[i] = res[i]%10;
if(res[i] && i >= len0)len0++;
}
}
【洛谷】P1009 阶乘之和——高精度算法的更多相关文章
- 洛谷P1009 阶乘之和 题解
想看原题请点击这里:传送门 看一下原题: 题目描述 用高精度计算出S=!+!+!+…+n! (n≤) 其中“!”表示阶乘,例如:!=****××××. 输入格式 一个正整数N. 输出格式 一个正整数S ...
- 洛谷——P1009 阶乘之和
P1009 阶乘之和 题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一 ...
- 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 提交该题 讨论 题解 记录 题目描述 ...
- 洛谷P1119-灾后重建-floyd算法
洛谷P1119-灾后重建 题目描述 给出\(B\)地区的村庄数NN,村庄编号从\(0\)到\(N-1\),和所有\(M\)条公路的长度,公路是双向的. 给出第\(i\)个村庄重建完成的时间\(t_i\ ...
- 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. ...
随机推荐
- 64位Win7下H3C的iMC无法查看“网络拓扑”的解决方法、心路历程
64位Win7下H3C的iMC无法查看"网络拓扑"的解决方法.心路历程
- C++实现串口通信问题(与Arduino)
参考1(已验证稍加修改可与Arduino通信):https://blog.csdn.net/qq_36106219/article/details/81701368 参考2(比较全,main函数需要自 ...
- httpd之ab压力测试
安装软件 yum install -y httpd 参数说明:用法Usage: ab [options] [http[s]://]hostname[:port]/path用法:ab [选项] 地址 选 ...
- JVM系列【5】JVM常用指令
JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 指令集分类 基于寄存器的指令集 基于栈的指令集 Hotspot中的Loca ...
- 多测师_高级肖sir分享pycharm中设置主题和设置代码颜色方法
一.修改pycharm中的主题颜色 二.修改代码颜色 File-->Settings-->Editor--> Color Scheme-->Language Defaults- ...
- 通过MapReduce降低服务响应时间
在微服务中开发中,api网关扮演对外提供restful api的角色,而api的数据往往会依赖其他服务,复杂的api更是会依赖多个甚至数十个服务.虽然单个被依赖服务的耗时一般都比较低,但如果多个服务串 ...
- 51Testing和传智播客相比哪个好?
首先我们需要先了解两家企业,51Testing是博为峰旗下的主营业务之一,主要是软件测试人才培训,包含就业培训.企业内训等服务,博为峰除了51Testing这个主营业务之外,还开设了51Code,主要 ...
- maven项目导入eclipse报错
错误提示: 原因:未安装maven,缺少ojdbc6.jar包 解决: 一.安装maven 第一步百度搜索Maven官网,进去之后,下载apache-maven-3.5.3-bin.zip,下载完成之 ...
- 第九章 nginx基础之搭建小游戏
一.nginx部署 1.epel源安装 [root@web01 ~]# yum install -y nginx 2.官方源安装 1.配置官方源[root@web02 ~]# vim /etc/yum ...
- JavaScript 的用法
内建的 JavaScript 对象可用于全局属性和函数 顶层函数(全局函数) 函数 描述 decodeURI() 解码某个编码的 URI. decodeURIComponent() 解码一个编码的 ...