今天主要讲一下数学的知识。

  一、进制转换:

      十进制到k进制:短除法:顺除至0,逆序取余。

      k进制转十进制:乘权相加。

      常见进制:四进制(对应2位二进制)、八进制(对应3位二进制)、十六进制(对应4位二进制,A表示10,B表示11,...,F表示15)

      常见进制在c++中的表示:二进制:前加0b;八进制:前加0;十六进制:前加0x。 

      小提示:只有十进制下的读数是“...几千几百...”的读法,其他进制都直接把数位上的数读出来就行辣。

  二、高精度 

      常见数据类型的范围:int:[-232,232-1]

                long long :[-263,263-1]≈1020

      那么对于超过这些数据范围的数怎么办呢?(我才不说有个int_128) ,这时候就要用到高精度了。高精度就是用来解决大整数的运算。

      有关高精度加减乘除的基本讲解可见我的另一篇博客,这里只说说新的东西。

    https://www.cnblogs.com/InductiveSorting-QYF/p/10679946.html(博客地址)

      对于高精度,我们可以写好高精度重载运算符的模板,码程序时先用int型码好程序,用小数验证算法正确性后再将int改成高精型(结构体的运用),否则程序出错后难以判断出错在算法还是高精。对于初始化结构体,可用构造函数(面向对象的知识),简单来说就是一个不写类型、函数名为结构体类型名、写在结构体里的函数,该函数每当有该结构体对象声明时都会被调用一次。(与此对应的还有析构函数,有兴趣的OIER可以看看:https://www.runoob.com/cplusplus/cpp-constructor-destructor.html(C++ 类构造函数 & 析构函数

)    配合C++中struct和class的区别  食用更佳)

      代码如下:

 struct gaojing
{
int z[];
int l;
gaojing()
{
l=;
memset(z,,sizeof(z));
}
}

      重载运算符(以加号为例)代码:

 gaojing operator+(gaojing a,gaojing b)
{
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;
}

     细心的同学会发现,其实这个有个问题。想必大家都知道函数传值调用与传址调用的区别:传值调用不会改变主调用函数中变量的值,而传址调用则会改变。同时由此发现每次传值调用都会拷贝一份主调用函数的变量。这个变量小的话还好,但如果要是很大的数组的话,必然会增加额外的时间复杂度,而且一个程序的加法运算又很多,那么调用函数的次数也很多,总的一看,时间就被浪费许多了。  

      怎么处理这种情况?

      既然传值调用不行,传址调用就好了嘛。同时为了防止打码手抖改掉加数的值,可在形参表中加上const。正确代码如下:

 gaojing operator+(const gaojing &a,const gaojing &b)
{
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;
}

      其他的运算符重载大都与此相差不大。这里再说明一下输入输出的重载:

代码如下:

 struct gaojing
{
int z[];
int l; friend istream& operator>>(istream &cin, gaojing &a)
{
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;
} friend ostream& operator<<(ostream &cout,const gaojing &a)
{
for (int i=a.l-;i>=;i--)
cout << a.z[i]; return cout;
}
};

输入/出的重载有点特别。它们需要写在struct的定义中。(好像因为是友联函数什么的,就是那个friend啦。),而且重载的是“<<”和">>"。istream和ostream是输入和输出流,函数形参表的意思差不多是:将cin里的数读到a中;将a里的数输出到cout中。只能是cin和cout,不能scanf和printf。(百度警告)。重载完各种运算符后,就可以把int型扔掉了,写程序真方便(高精模板真多)

    最后TIP:以上提及的四则运算符都没有考虑有负数出现的情况,有负数需另考虑。

      

    

        

      

<知识整理>2019清北学堂提高储备D4的更多相关文章

  1. <知识整理>2019清北学堂提高储备D2

    简单数据结构: 一.二叉搜索树 1.前置技能: n/1+n/2+……+n/n=O(n log n)  (本天复杂度常涉及) 2.入门题引入: N<=100000. 这里多了一个删除的操作,因此要 ...

  2. <知识整理>2019清北学堂提高储备D3

    全天动态规划入门到入坑... 一.总概: 动态规划是指解最优化问题的一类算法,考察方式灵活,也常是NOIP难题级别.先明确动态规划里的一些概念: 状态:可看做用动态规划求解问题时操作的对象. 边界条件 ...

  3. <知识整理>2019清北学堂提高储备D1

    一.枚举: 枚举是最简单最基础的算法,核心思想是将可能的结果都列举出来并判断是否是解. 优点:思维简单,帮助理解问题.找规律.没头绪时 缺点:时空复杂度较高,会有很多冗余的非解(简单的枚举几乎没有利用 ...

  4. <知识整理>2019清北学堂提高储备D5

    今天主讲图论. 前言:图的定义:图G是一个有序二元组(V,E),其中V称为顶集(Vertices Set),E称为边集(Edges set),E与V不相交.它们亦可写成V(G)和E(G). 一.图的存 ...

  5. 清北学堂提高突破营游记day1

    上午7点半到的国防宾馆,8点开始的培训. 讲课人林永迪. 没错就是这个人: 他推荐的教辅:刘汝佳紫书,算法导论(也就看看..),刘汝佳白书 先讲模拟.(貌似就是看题论题. 然后贪心. 贪心没有固定的模 ...

  6. 清北学堂提高组突破营游记day3

    讲课人更换成dms. 真的今天快把我们逼疯了.. 今天主攻数据结构, 基本上看完我博客能理解个大概把, 1.LCA 安利之前个人博客链接.之前自己学过QWQ. 2.st表.同上. 3.字符串哈希.同上 ...

  7. 清北学堂提高组突破营考试T1

    题目如下: (想要作弊的后几届神仙们我劝你们还是别黈了,这个题如果你们不会只能证明你们上错班了). 好,题目看完了,发现是一道大模拟(%你)题,于是我们按照题目说的做: #include<ios ...

  8. 清北学堂提高组突破营游记day6

    还有一天就结束了..QWQ 好快啊. 昨天没讲完的博弈论DP: 一个标准的博弈论dp,一般问的是是否先手赢. 博弈论最关键的问题:dp过程. 对于一个问题,一定有很多状态,每个状态可以转移到其他的一些 ...

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

    长者zhx来啦.. (又要送冰红茶了...) zhx一上来就讲动态规划...是不是要逼死人.... 动态规划: 最简单的例子:斐波那契数列.因为他是递推(通项公式不算)的,所以前面的已经确定的项不会影 ...

随机推荐

  1. vue--》如何使用wacth监听对象的属性变化?

    在开发过程中,我们经常需要监听watch监听一个对象的变化,但是如何来实现     监听对象中属性的变化呢? 先回顾一下如何监听整个对象的变化,使用watch就行了 export default { ...

  2. python+selenium元素定位之XPath学习02

    XPath 语法 XPath 使用路径表达式来选取 XML 文档中的节点或节点集.节点是通过沿着路径 (path) 或者步 (steps) 来选取的. XML 实例文档 我们将在下面的例子中使用这个 ...

  3. golang网络编程高并发

    1 golang写服务器不需要epoll吗 golang写服务器不需要在用reactor模式的epoll了,因为golang的协程非常廉价,可以并发开启成千上完个协程. 一个协程占用内存大概2KB左右 ...

  4. OracleOraDb11g_home1TNSListener服务无法启动

    作者:伪墨 来源:CSDN 原文:https://blog.csdn.net/qq997404392/article/details/73296429 今天遇到OracleOraDb11g_home1 ...

  5. HashMap底层为什么一定用数组

    HashMap源码数据结构: Entry[] table = new Entry[capacity]; 其中,Entry就是一个链表节点.如果将数组替换成LinkedList是否可行?如下: List ...

  6. GraphQL入门有这一篇就足够了

    GraphQL入门有这一篇就足够了:https://blog.csdn.net/qq_41882147/article/details/82966783 版权声明:本文为博主原创文章,遵循 CC 4. ...

  7. Java语言的发展历程

    前言 自1946年2月14日世界上首款计算机ENAC问世,第一代计算机语言“机器语言”便诞生了,它使用的是最原始的穿孔卡片,这种卡片上使用的语言只有专家才能理解,与人类语言差别极大.这种语言本质上是计 ...

  8. 主机(windows10)虚拟机(ubuntu18)arm板(linux3.4)相互ping通

    实际中在主机上安装虚拟机,并在主机上通过网线连接arm板进行调试. 用网线将主机和arm板直接物理连接,且主机和arm必须处于同一个网段.(我们知道主机中的网卡具有路由器的功能) 其中arm板IP地址 ...

  9. 05: jwt原理&使用

    1.1 COOKIE使用和优缺点   参考博客:https://baijiahao.baidu.com/s?id=1608021814182894637&wfr=spider&for= ...

  10. SpringMVC简单介绍及执行

    SpringMVC介绍 Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单.这些控制器一 ...