今天只有一上午,讲的东西不多,这里就整理一下高精的东西,数论部分请见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. sping data jpa 共享主键 OneTonOne 延时加载

    当我们使用spring boot创建项目时,系统默认使用的是如下parent. <parent> <groupId>org.springframework.boot</g ...

  2. 数据分析画图,使用原生sql查询数据

    1.使用工具 https://www.hcharts.cn/ http://echarts.baidu.com/ 2.子表查询 id 创建时间 内容 处理者 1 2017-02-01 11:11 1 ...

  3. 记录一次TabBar使用本地图片

    方法一: 第一步:import  addpng  from '../../assets/img/add.png' 第二步: { title: '找折扣', image: addpng}, 即可. 方法 ...

  4. LazyMan的深入解析和实现

    一.题目介绍 以下是我copy自网上的面试题原文: 实现一个LazyMan,可以按照以下方式调用: LazyMan("Hank")输出: Hi! This is Hank!   L ...

  5. Java多线程(1)

    线程与进程 进程:程序的执行过程 线程:线程共享进程的资源 Java多线程 实现的方式 继承Tread类:使用getName()获取当前线程名 实现Runnable接口:Thread.currentT ...

  6. nmbd - 向客户端提供构造在IP之上的NetBIOS名字服务的NetBIOS名字服务器

    总览 SYNOPSIS nmbd [-D] [-F] [-S] [-a] [-i] [-o] [-h] [-V][-d <debug level>] [-H <lmhosts fil ...

  7. 04-A的LU分解

    一.矩阵$AB$的逆 $(AB)^{-1}=B^{-1}A^{-1}$,顺序正好相反 二.$A=LU$ 如矩阵: $\left[\begin{array}{ll}{2} & {1} \\ {8 ...

  8. 一、ASP.NET Iframework_SignalR集线器类(v2)

    一.新建项目,选MVC项目默认 添加mvc文件夹和核心引用 二.添加SignaIR包 SignalR的准备:NuGet包管理器搜索:工具——>库程序包管理器——>Microsoft.Asp ...

  9. Linux日常之以当前时间命名文件

    要求:将当前硬件信息的内容统一以一个文件的形式写入目录date中,且该文件是以“cpu_当前时间.txt”方式命名:    实现该要求主要理解三方面: (1) 显示当前硬件信息的命令:lscpu (2 ...

  10. P4315 月下“毛景树” (树链剖分+边剖分+区间覆盖+区间加+区间最大值)

    题目链接:https://www.luogu.org/problem/P4315 题目大意: 有N个节点和N-1条树枝,但节点上是没有毛毛果的,毛毛果都是长在树枝上的.但是这棵“毛景树”有着神奇的魔力 ...