上篇文章我们了解了高精度加法,今天我们来讲减法。
和加法一样,减法也是模拟小学减法竖式:
先用数组存下被减数和减数:
①如果a[i] < b[i]: 模拟a[i]向a[i+1]借位:a[i+1]--; a[i] += 10;
②模拟减法:c[i] = a[i]
这时有一个问题:如果a[i+1] == 0, 这样借位是否会出问题?
其实不会.因为最多借1位,即使a[i+1]被借位后等于-1,因为a>b, a[i+1]还可以向a[i+2]借位。借位后a[i+1]等于9,而b[i+1]最大为9。
我们来看一下高精度减法的思路:
①高精度数的读取存储:使用字符串方式读取,然后转成整型数组,为方便计算,进行逆向存储。
②模拟竖式进行减法:相同位置进行相减ÿ