今天只有一上午,讲的东西不多,这里就整理一下高精的东西,数论部分请见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的更多相关文章

  1. 清北学堂2019NOIP提高储备营DAY1

    今天是第二次培训的第一天,关于NOIP的基础算法,主要内容如下: $1.枚举 $2.搜索 $3.贪心 $1.枚举: •定义: 枚举又叫做穷举,是一种基础的算法,其思路主要是:从问题中有可能的解集中一一 ...

  2. 清北学堂2019NOIP提高储备营DAY3

    今天是钟神讲课,讲台上照旧摆满了冰红茶 目录时间到: $1. 动态规划 $2. 数位dp $3. 树形dp $4. 区间dp $5. 状压dp $6. 其它dp $1. 动态规划: ·以斐波那契数列为 ...

  3. 2017清北学堂(提高组精英班)集训笔记——动态规划Part3

    现在是晚上十二点半,好累(无奈脸),接着给各位——也是给自己,更新笔记吧~ 序列型状态划分: 经典例题:乘积最大(Luogu 1018) * 设有一个长度为 N 的数字串,要求选手使用 K 个乘号将它 ...

  4. 7月清北学堂培训 Day 3

    今天是丁明朔老师的讲授~ 数据结构 绪论 下面是天天见的: 栈,队列: 堆: 并查集: 树状数组: 线段树: 平衡树: 下面是不常见的: 主席树: 树链剖分: 树套树: 下面是清北学堂课程表里的: S ...

  5. 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)

    清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...

  6. 清北学堂2017NOIP冬令营入学测试 P4744 A’s problem(a)

    清北学堂2017NOIP冬令营入学测试 P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算 ...

  7. 济南清北学堂游记 Day 1.

    快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...

  8. 清明培训 清北学堂 DAY1

    今天是李昊老师的讲授~~ 总结了一下今天的内容: 1.高精度算法 (1)   高精度加法 思路:模拟竖式运算 注意:进位 优化:压位 程序代码: #include<iostream>#in ...

  9. 清北学堂提高组突破营游记day4

    今天主攻图论. 对于这道题,30分做法是暴力搜索全部来判断是否有异样. 对于满分做法,利用带权并查集.? 又带我们串了一边LCA 安利个人LCA博客. spfa代码.原理:循环队列. 然后是floyd ...

随机推荐

  1. python学习-第四天补充-面向对象

    python学习-第四天补充-面向对象 python 私有 --name mangling(名字修改.名字) 在命名时,通过使用两个下划线作为开头,可以使得这个变量或者函数编程私有的,但是这个其实的p ...

  2. html中设置height=100%无效的问题

    设置height=100%(网页内容能够更好的适配各种屏幕大小) 第一种是设置某个单独的div元素   height=100%无效 原因很简单,所有基于本分比的尺寸必须基于父元素,而你如果没有设置父元 ...

  3. 搜索专题: HDU1027Ignatius and the Princess II

    Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ( ...

  4. 3-6如何在一个for语句中迭代多个可迭代对象

    1.并行迭代 迭代元组可以进行拆包迭代. >>> zip([1,2,3,4],('a','b','c','d')) [(1, 'a'), (2, 'b'), (3, 'c'), (4 ...

  5. 剑指offer-python-回溯法-矩阵中的路径

    这个系列主要详细记录代码详解的过程. 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格 ...

  6. ThinkPHP5 支付宝支付扩展库(超级简单,超级好用!)

    ThinkPHP5 支付宝支付扩展库, 一个静态方法的调用就可以实现,包括手机网站支付.电脑网站支付.支付查询.退款.退款查询.对账单所有功能,而且是2017年7月20日最新版~我的想法是,调用一个静 ...

  7. TCP/IP四层协议

    1.数据链路层 数据链路层实现了网卡接口的网络驱动程序,处理数据在物理媒介(以太网,令牌环)上的传输,常用协议包含ARP(地址解析协议),RARP(逆地址解析协议)两个协议,他们实现了IP地址和物理地 ...

  8. Python爬虫之urllib.parse详解

    Python爬虫之urllib.parse 转载地址 Python 中的 urllib.parse 模块提供了很多解析和组建 URL 的函数. 解析url 解析url( urlparse() ) ur ...

  9. 关于jsp删除成功,添加成功等之后 页面自动跳转的js写法

    因为比较常用,所以写在博客里保存起来,防止以后忘了不会写了: 删除成功,<span id="time" style="background:red"> ...

  10. Codeforces 934 最长不递减子序列 多项式系数推导

    A B C 给你一个长度为N的01串 你可以翻转一次任意[L,R]的区间 问你最长的不递减序列为多少长 处理出1的前缀和 和2的后缀和 然后N^2 DP 处理出 [L,R]区间的最长不递增序列 #in ...