清北学堂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 ...
随机推荐
- 取石子游戏 HDU 1527 博弈论 威佐夫博弈
取石子游戏 HDU 1527 博弈论 威佐夫博弈 题意 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两 ...
- linux下安装msgpack,yar,phalcon
安装msgpack扩展 下载:http://pecl.php.net/package/msgpack cd /usr/local tar zxvf msgpack-0.5.5.tgz cd msgpa ...
- 05: zabbix 监控配置
目录:zabbix其他篇 01: 安装zabbix server 02:zabbix-agent安装配置 及 web界面管理 03: zabbix API接口 对 主机.主机组.模板.应用集.监控项. ...
- 解决HTML乱码
转自:https://blog.csdn.net/yuxisanno139/article/details/80675426
- Spring Boot实现SAAS平台的基本思路
一.SAAS是什么 SaaS是Software-as-a-service(软件即服务)它是一种通过Internet提供软件的模式,厂商将应用软件统一部署在自己的服务器 上,客户可以根据自己实际需求,通 ...
- 在浏览器输入URL发生了什么
在我们输入google.com之后,浏览器上很快就会呈现出谷歌的页面,本文简单介绍一下从URL的输入到浏览器页面的展示,这中间发生了些什么. URL是什么URL全名叫统一资源定位符,uniform r ...
- PAT Advanced 1006 Sign In and Sign Out (25 分)
At the beginning of every day, the first person who signs in the computer room will unlock the door, ...
- 牛客假日团队赛2 C 修围栏 ( 哈夫曼树,贪心)
链接:https://ac.nowcoder.com/acm/contest/924/C 来源:牛客网 修围栏 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...
- Django【第19篇】:Django之extra
extra过滤 extra extra(select=None, where=None, params=None, tables=None, order_by=None, select_params= ...
- GitLab5
GitLab5发布快一个月了,决定试用下,5.0最大的特性就是用GitLab-Shell取代了Gitolite,这大大降低了安装难度,不多本人在安装过程中还是越到了一些问题,所以记录下来供要安装Git ...