清北学堂2019NOIP提高储备营DAY4
今天只有一上午,讲的东西不多,这里就整理一下高精的东西,数论部分请见my blog
高精度:
先讲一讲进制问题:十进制的二进制表示:以10为例,
10的二进制表示为1010
10的三进制表示为101
将一个十进制的x转为k进制
要求把十进制的55转为三进制的表示
短除法如下:
3|55……1
3|18……0
3|6……0
3|2……2
0
将所有余数从下向上写出,55的三进制表示为2001
将一个k进制的数转成十进制的数
根据定义,k进制的xnxn-1xn-2……x0可以转为x·k^n+x·k^n-1+……+x·k^0
二进制、八进制、十进制、十六进制
- 计算机中最常用的进制
- 在C++中写一个二进制,只需要在前面加上一个前导0
- 十六进制:用字母对应10到15(A~F),所以0x3f3f3f3f≈1.1*10^9
高精度的目的:用C++自带的类型,十进制一旦超过20位,就无法进行运算,高精度运算的目的就是通过模拟竖式加减乘除法
高精度步骤:
(1)个位对齐
(2)逐位相加
(3)注意进位
高精度的存储:
用数组来存每一位
以19260817为例,如果按照顺序存储,就会存成19260817。这样就不能满足个位对齐的步骤,那么我们就要反着存,即71806291,这样在做加法时个位一定是对齐的
高精度的代码(钟神的写法,只需要将int a,b转换成gaojing a,b)
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std; struct gaojing
{
int z[];//用来存这个数的数组,0表示个位,以此类推
int l;//表示这个数是一个l位的数
gaojing()
{
l=;
memset(z,,sizeof(z));
}//构造函数,每次声明一个高精类,函数都会运行一次 friend istream& operator>>(istream &cin,gaojing &a)//意思是用cin这个读入函数读入a,friend叫做有缘函数
{
static/*在函数中开数组的局部变量,一定要加static*/ char s[];
cin>>s;
int l=strlen(s);
for(int i=;i<=l;++i)
{
a.z[i]=s[l-i-]-'';
}
a.l=l;
return cin;//第17行和第27行当做模板记就行了
} friend ostream&operator<<(ostream &cout,const gaojing &a)
{
for(int i=a.l-;i>=;i--)
{
cout<<a.z[i];
}
return cout;
}
};
//写一下需要的运算符:+ - * / % < <= > >= == != cin>> cout<<
//这里只对
//运用重载运算符
gaojing operator+(const gaojing &a,const gaojing &b)//定义的时高精度之间的加法,不影响正常的加法,返回类型也应该是一个高精度的数
//需要注意,gaojing a时,系统会对a进行备份,只在这个函数中运用,gaojing &a时,系统会直接将a的值传过来
//a和b是一个高精度的东西,如果不用取址符号,将会在每一次运行函数时都拷贝一个很大很大的数组,所以在a,b前边加上&
//但是如果手抖将a和b的值改动,应该加一个const(来自钟神的关爱),如果要将这个函数喂给STL,const是必不可少的
{
gaojing c;
int l=max(a.l,b.l);
for(int i=;i<l;++i)
{
c.z[i]=a.z[i]+b.z[i];
c.z[i+]+=c.z[i]/;
c.z[i]=c.z[i]%;//模拟的是进位的情况
}
if(c.z[l]!=) l++;
c.l=l;//检查是否有进位
return c;
} gaojing operator*(const gaojing &a,const gaojing &b)
{
gaojing c;
for(int i=;i<a.l;++i)
for(int j=;j<=b.l;++j)
c.z[i+j]=a.z[i]*b.z[j];
c.l=a.l+b.l;
for(int i=;i<c.l;++i)
{
c.z[i+]+=c.z[i]/;
c.z[i]=c.z[i]%;
}
while(c.l>&&c.z[c.l]==)//找第一个不等于0的c.l,这时的l为c.z[i]的长度
c.l--;
if(c.l==) c.l++;
return c;
} int main()
{
gaojing x,y;
cin>>x>>y;
cout<<x+y<<endl<<x*y<<endl;
}
清北学堂2019NOIP提高储备营DAY4的更多相关文章
- 清北学堂2019NOIP提高储备营DAY1
今天是第二次培训的第一天,关于NOIP的基础算法,主要内容如下: $1.枚举 $2.搜索 $3.贪心 $1.枚举: •定义: 枚举又叫做穷举,是一种基础的算法,其思路主要是:从问题中有可能的解集中一一 ...
- 清北学堂2019NOIP提高储备营DAY3
今天是钟神讲课,讲台上照旧摆满了冰红茶 目录时间到: $1. 动态规划 $2. 数位dp $3. 树形dp $4. 区间dp $5. 状压dp $6. 其它dp $1. 动态规划: ·以斐波那契数列为 ...
- 2017清北学堂(提高组精英班)集训笔记——动态规划Part3
现在是晚上十二点半,好累(无奈脸),接着给各位——也是给自己,更新笔记吧~ 序列型状态划分: 经典例题:乘积最大(Luogu 1018) * 设有一个长度为 N 的数字串,要求选手使用 K 个乘号将它 ...
- 7月清北学堂培训 Day 3
今天是丁明朔老师的讲授~ 数据结构 绪论 下面是天天见的: 栈,队列: 堆: 并查集: 树状数组: 线段树: 平衡树: 下面是不常见的: 主席树: 树链剖分: 树套树: 下面是清北学堂课程表里的: S ...
- 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)
清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...
- 清北学堂2017NOIP冬令营入学测试 P4744 A’s problem(a)
清北学堂2017NOIP冬令营入学测试 P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算 ...
- 济南清北学堂游记 Day 1.
快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...
- 清明培训 清北学堂 DAY1
今天是李昊老师的讲授~~ 总结了一下今天的内容: 1.高精度算法 (1) 高精度加法 思路:模拟竖式运算 注意:进位 优化:压位 程序代码: #include<iostream>#in ...
- 清北学堂提高组突破营游记day4
今天主攻图论. 对于这道题,30分做法是暴力搜索全部来判断是否有异样. 对于满分做法,利用带权并查集.? 又带我们串了一边LCA 安利个人LCA博客. spfa代码.原理:循环队列. 然后是floyd ...
随机推荐
- 基于gulp的前端自动化方案
前言 最近几年前端技术发展日新月异,特别是单页应用的普及.组件化.工程化.自动化成了前端发展的趋势.webpack已经成为了前端打包构建的主流,但是一些老古董的项目还是存在的,也有优化的必要,正好 ...
- 【源码解读】pix2pix(一):训练
源码地址:https://github.com/mrzhu-cool/pix2pix-pytorch 相比于朱俊彦的版本,这一版更加简单易读 训练的代码在train.py,开头依然是很多代码的共同三板 ...
- C#导出大量数据到excel,怎么提升性能
一,要提升性能,我们先要知道耗时的地方在哪里 1,数据库查询,2,把数据组合成新集合循环嵌套太多 二,那我们怎么优化呢? 一,数据库查询,1>,数据库查询:如果数据量小,我们可以用临时datat ...
- MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码
先来张在路上…… 铛铛铛……项目源码下载地址:http://files.cnblogs.com/ontheroad_lee/MongoDBDemo.rar 此项目是用Maven创建的,没有使用Mave ...
- DOMContentLoaded和load的区别
一.概念 DOMContentLoaded 当初始的 HTML 文档被完全加载和解析完成之后,DOMContentLoaded 事件被触发,而无需等待样式表.图像和子框架的完成加载. load loa ...
- 划水日记之大哥带我走渗透I
5/24/19 周五 access注入 先测试是否有漏洞 or nor and 1=1 and 1=2 2. Order by 猜字表端,发现一共有22个 3..然后使用 union select 1 ...
- PHP7搭建项目遇到的坑
报错一:该网页无法正常运作情况原因记录 code 500 原因:由于php.ini配置文件中错误显示关闭导致 解决方法: 修改php.ini配置文件 display_errors = On displ ...
- Codeforces Round #430 (Div. 2) - B
题目链接:http://codeforces.com/contest/842/problem/B 题意:给定一个圆心在原点(0,0)半径为r的大圆和一个圆内的圆环长度d,然后给你n个小圆,问你有多少个 ...
- 10年前文章_respin 下制作iso 文件的脚本说明
1.prepare_spin.sh 用于在 /var/rpm 下生成 lhs-local 需要的repositery 2.respin.sh 使用revisor 生成 iso 3. post_spi ...
- 在 LaTeX 中同步缩放 TikZ 与其中的 node
PGF/TikZ 是 Till Tantau 开发的基于 TeX 的绘图引擎.因其可以直接在 LaTeX 文稿中通过代码绘制向量图,所以是目前流行的 LaTeX 绘图解决方案之一. 在 tikzpic ...