洛谷P1009 阶乘之和 题解
想看原题请点击这里:传送门
看一下原题:
题目描述
用高精度计算出S=!+!+!+…+n! (n≤) 其中“!”表示阶乘,例如:!=****1 5!=××××。 输入格式
一个正整数N。 输出格式
一个正整数S,表示计算结果。 输入输出样例
输入 输出
如果这道题不需要用高精度的话那就变得很简单了,但由于我们看到了洛谷贴上了“高精度”的标签但由于这道题目是求阶乘和所以越往后n的阶乘就会越大。
又因为n!=n*(n-1!,所以有转移方程n!=n*(n-1)!避免重复运算(ROS只是唠叨一句防止有些人不知道忘记这一方法)
高精度也很平常,但ROS这道题debug了好久就是因为‘+=’写成了‘=’
所以写代码一个地方错了就会出现各种玄学bug呀
代码如下:
#include<bits/stdc++.h>
#define N 1000000
using namespace std;
int n;
int tmp[N];
int lt;
int a[N];
int la;
int lm;
void cal(int);
int main(){
scanf("%d",&n);
tmp[]=;
lt=;
for(int i=;i<=n;i++){
cal(i);
lm=max(lt,la);
for(int j=;j<=lm;j++){
a[j]+=tmp[j];
}
for(int j=;j<=lm;j++){
a[j+]+=a[j]/;
a[j]%=;
}
la=lm;
while(a[la+]>){
la++;
a[la+]+=a[la]/;
a[la]%=;
}
}
for(int i=la;i>;i--){
if(a[i]==){
la--;
continue;
}
break;
}
for(int i=la;i>=;i--){
printf("%d",a[i]);
}
return ;
}
void cal(int x){
for(int i=;i<=lt;i++){
tmp[i]*=x;
}
for(int i=;i<=lt;i++){
if(tmp[i]>=){
tmp[i+]+=tmp[i]/;
tmp[i]%=;
}
}
while(tmp[lt+]>){
lt++;
tmp[lt+]+=tmp[lt]/;
tmp[lt]%=;
}
return ;
}
洛谷P1009 阶乘之和 题解的更多相关文章
- 洛谷——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,表示计算结 ...
- 洛谷 P1134 阶乘问题 题解
题面 很裸的边取模边乘.注意因为进位的原因模数应该比较大: 另外,这道题是一道标准的分块打表例题(那样的话数据就可以更大了),可以用来练习分块打表: #include<bits/stdc++.h ...
- P1009 阶乘之和
P1009 阶乘之和 题目提供者洛谷OnlineJudge 标签数论(数学相关)高精1998NOIp提高组NOIp普及组 难度普及- 通过/提交1139/3791 提交该题 讨论 题解 记录 题目描述 ...
- 洛谷 P1220 关路灯 题解
Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
- 【洛谷P3960】列队题解
[洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...
随机推荐
- 【转载】C/C++编译过程分析
转自:http://www.360doc.com/content/14/0109/16/835125_343879650.shtml C/C++编译过程 C/C++编译过程主要分为4个过程 1) 编译 ...
- Redis如果内存满了怎么办?
Redis占用内存大小 我们知道Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小. 1.通过配置文件配置 ...
- my97日期控件弹出位置显示异常
使用my97日期选择控件的时候,如果整个页面是有滚动条的,根据触发显示日期的控件的父控件的position不同会显示不同的情况 1.position不为fixed则滑动滚动条,显示的日期层不会出现异常 ...
- MongoDB C#驱动使用方法
string connStr = ConfigurationManager.ConnectionStrings["MongoDBConnStr"].ConnectionString ...
- 线性递推BM模板
#include <cstdio> #include<iostream> #include <cstring> #include <cmath> #in ...
- 将html代码部署到阿里云服务器,并进行域名解析,以及在部署过程中遇到的问题和解决方法
本博客主要是说一下,,如何将html代码部署到阿里云服务器,并进行域名解析,以及在部署过程中遇到的问题和解决方法. 1.先在阿里云上购买一台阿里云服务器(ECS云服务器): 2.远程连接上该服务器,在 ...
- 【C语言】找出1000以内可以被3整除的数
分别用while,do-while,for语句实现 方法一:while #include<stdio.h> int main() { int m; m = ; ) { == ) print ...
- queue 官方运用
import threading import random,time import queue q_init = queue.Queue(maxsize=5) import logging logg ...
- 6_4 破损的键盘(UVa11988)<链表>
你用了一个有点坏掉的键盘打字,该键盘会自动按下”Home”键与“End”键,直到打完整个内容以前,你都没有发现到这个问题.本题给定键盘输出的字串(包含Home与End),请你输出该字串在屏幕显示的内容 ...
- web开发中的一些不常见的概念
1.惊群 [活跃]星际争霸小王子 就是当你在车站时,一堆拉客的人一拥而上,想你坐他的车,于是就惊群了.但你只能坐一个车,所以没拉到你的就悻悻而归,于是return false[活跃]星际争霸小王 2 ...