【洛谷】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. ...
随机推荐
- Win10系统下的MySQL5.7.24版本(解压版)详细安装教程
进入MySQL官网下载压缩包 MySQL官网:https://www.mysql.com/ 将页面拉到最底,点击MySQL Community Server 跳转到下载页面,默认选择是最新版MySQL ...
- P2947 Look Up S
题目描述: 约翰的N(1≤N≤10^5)头奶牛站成一排,奶牛i的身高是Hi(l≤Hi≤1,000,000).现在,每只奶牛都在向右看齐.对于奶牛i,如果奶牛j满足i<j且Hi<Hj,我们可 ...
- python双向链表的实现
python双向链表和单链表类似,只不过是增加了一个指向前面一个元素的指针,下面的代码实例了python双向链表的方法 示意图: python双向链表实现代码: # -*- coding: utf-8 ...
- plt.imshow()显示图片色差问题
转载:https://www.cnblogs.com/darkknightzh/p/6039667.html 由于系统缺少某些库,导致cv2.imshow()无法使用,于是使用matplotlib.p ...
- python中numpy.savetxt 参数
转载:https://blog.csdn.net/qq_36535820/article/details/99543188 numpy.savetxt 参数 numpy.savetxt(fname,X ...
- DOS批处理中%cd%与%~dp0的区别详解
转载:https://www.jb51.net/article/105325.htm DOS批处理中%cd%与%~dp0的区别详解 Windows下批处理中%cd%和%~dp0都能用来表示当前 ...
- DM8数据库备份还原的原理及应用
(本文部分内容摘自DM产品技术支持培训文档,如需要更详细的文档,请查询官方操作手册,谢谢) 一.原理 1.DM8备份还原简介 1.1.基本概念 (1)表空间与数据文件 ▷ DM8表空间类型: ▷ SY ...
- mysql物理优化器代价模型分析【原创】
1. 引言 mysql的sql server在根据where condition检索数据的时候,一般会有多种数据检索的方法,其会根据各种数据检索方法代价的大小,选择代价最小的那个数据检索方法. 比如说 ...
- fastadmin 增加批量操作字段 提示无权限
是这样的找了权限节点的问题,始终找不到,后来 在社区传世人回答别人问题是提及到 $multiFields 就全局搜了下 在基类 Backend 里找到了这个.然后拿到 控制器中添加需要的参数 再次尝 ...
- 微信小程序适配iPhone X
1.获取设备型号 App({ // 全局数据 globalData: { // 其他数据定义 ... isIPX: false, // 当前设备是否为 iPhone X }, // 小程序启动入口 o ...