在解决了高精度整数的输入、存储以及输出的问题后,我们终于开始正式思考“运算”部分的实现。
加法是最简单的一种四则运算,也是我们小学时数学最先就学到的运算规则,对于内置的整数类型而言,计算机通过二进制的电位运算可以快速的得到结果,而对于我们按位存入的高精度整数而言,要想对其进行加法运算,我们就需要返璞归真,首先,我们来回忆下小学时的加法,看图1:

图1

从个位开始相加,结果放在横线下,如果相加的结果超过10,则进1到下一位。
没错,我们就是要所要依靠的就是这样一个简单的规则!

首先考虑到我们存储数字的方式:如果两个数字位数不同,则会出现超过数位的数字再相加时vector out of range的情况,所以我们要把两个数字一个一个加到结果的位置上(比如图1的个位,结果位原先是0,先把4加到结果位,结果位变为4,然后再把2加到结果为,变为6),这样可以方便我们对两个加数的各个位的情况进行把握。
下面就是加法运算的具体实现方法:

在此之后,我还对“+=”运算符进行了重载,有了刚才的“+”,这个运算符的重载异常的简单。下面给出加入了加法运算的高精度运算类的完整代码:
对上一次的代码有所改进,使高精度运算可以直接接受内置型整数(你把int都换成BigInt不会有什么区别,该咋用咋用,不过截止到目前为止,你只能用加法:P),体会下C++的方便吧!一个符号重载之后可以到处用呀~~

说点什么

4 评论 在 "高精度运算(2)加法"

  Subscribe  
最新 最旧 得票最多
提醒

1、BigInt operator + (const BigInt bInt)
为什么不是引用呢。
2、BigInt operator = (const BigInt bInt)
考虑一下自己给自己赋值将会发生什么。
3、int tmp(rslt.num[rslt.num.size() – 1]);
考虑它在循环当中声明和在循环外声明,效率有何差异。
4、BigInt operator = (const string sNum)
同1。

第二点,由于不是引用,成员又是vector 应该是会复制一遍再重新赋值吧,倒也不会出严重的错误 虽然有开销浪费- –