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

  一、进制转换:

      十进制到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. Lesson 4 The double life of Alfred Bloggs

    There are two type of people in the society. People who do manual works can higher payment than peop ...

  2. 爬虫三之beautifulsoup

    基本使用 from bs4 import BeautifulSoup soup = BeautifulSoup(html#,'lxml','xml','html5lib') soup.prettify ...

  3. spark 2.3.3 的MLlib 使用API

    1.api官网 http://spark.apache.org/docs/2.3.3/ml-guide.html

  4. Marked Ancestor

    一道并查集的题目硬是被我当成线段树写了,感觉这样写虽然不是最好的,不过能a就行 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=103906 ...

  5. 【转】mysqldump原理探究

    作者:胡儿胡儿 来源:CSDN 原文:https://blog.csdn.net/cug_jiang126com/article/details/49824471 —————————————————— ...

  6. mysql分组统计后将结果顺序排列(union实现)

    工作中用到统计12月份通话记录,统计号码拨打次数,但是问题出在一个号码可以拨打多次,每次可能接通也可能不接通,如果用主叫号码caller字段group by分组后count(*)统计数目,这样会导致不 ...

  7. 高性能迷你React框架anujs1.1.3发布

    anujs现在只差一个组件(mention)就完全支持阿里的antd UI库了.一共跑通346个测试, 应该是全世界最接近官方React的迷你框架了. 以后的工作就是把React16的一些新特性支持了 ...

  8. javascript中跨域问题的解决方法汇总

    javascript中实现跨域的方式总结 第一种方式:jsonp请求:jsonp的原理是利用<script>标签的跨域特性,可以不受限制地从其他域中加载资源,类似的标签还有<img& ...

  9. 牛客练习赛14 B 区间的连续段 (倍增)

    链接:https://ac.nowcoder.com/acm/contest/82/B来源:牛客网 区间的连续段 时间限制:C/C++ 7秒,其他语言14秒 空间限制:C/C++ 262144K,其他 ...

  10. Manacher || Luogu P3805【模板】manacher算法

    题面:[模板]manacher算法 代码: #include<cstdio> #include<cstring> #include<iostream> #defin ...