一般我们可能会遇到超过范围的数的运算,直接定义进行计算,那么久可以通过高精度算法来实现。
高精度算法的实现步骤如下:读入,将数据储存到数组中,进行加减乘除的计算。
储存数据时注意的问题:
判断位数,由于这里是储存到字符串里面,故而数组的第一位可能是负号“-”, 此处可以用ASCII码来判断是不是等于45,标记,然后再读入数据转化为下标等于位数减一。(即下标0时是个位,这个到乘法时就会发现很奇妙了)
加法:
(1)上步判断并去掉了负号,加法时判断是否同号,若同号直接加,加法是用循环,一次循环中,当前位数的值为后一位的进位和这位的和对十取余,进位的值为和除十。这样可以把每一位求出来。(跟二进制加法器有点像额)
(2)如果不同号,那么就转化为减法运算。
减法:
(1)这里减法的计算到时比较简单,只涉及到借位的问题,大小判断,借位。但是最后判断符号的时候就要有点麻烦了,要考虑到加法转减法的情况,但是只要考虑清楚就没问题了。
乘法:
(1)乘法运算的最大位数是两个因数的位数和减一。
(2)乘法和加法的思路相似,但是要使用双层循环,同时下标有所改变,两个数乘积的下标等于两个下标和,然后在对十取余,进位是除以十。
除法:
(1)这个得用减法来模拟,用被除数减去除数的10的n次方倍,用最后一次大于0的结果减去n-1倍,依次类推,然后结果数组的下标的值就是n-1。
(2)实现是可以先判断除数,被除数数组的位数差,确定十的n次方的n,再进行计算。
代码打不打看有没有时间了。