介绍:
高精度减法也同加法一样,也是用于位数太大的运算,给你一个十几位的数你可能会做直接开个long long 的数据类型就解决了,但是给你一个100位的呢,1000位的呢,开long long 也不够了,所以就要用高精度了,也就是高精度算法就是处理位数很大数据。
如果你对高精度加法也不是很熟悉你可以看这个(高精度算法——高精度加法)
减法过程:
- 首先我们先来看下小学的知识减法
| 1 | 2 | 3 | |
|---|---|---|---|
| – | 2 | 4 | |
| 9 | 9 |
- 我们来简单的分析下好吧,就当我们都还是小学生呢(🤭)
- 开始做这个减法之前我们还要知道什么是减数,什么是被减数。
- 这个就是字面意思,被减数,有个被字对吧,就是那个会减少的数就是被减数,这里就是123对吧,理解了被减数,这个减数当然也就出来了,24就是减数了。
- 好了,被减数和减数知道了,咱就可以开始做减法吧。
- 也是和加法一样,先从个位开始减的,先看3,3减4不够减是吧,所以就要从前面借一位,这里借的1,是在十位上借的,实际上是借了10,这个没毛病吧,也就是现在个位上是3 加上的10 等于13 了,所以再用13 - 4 这下就知道了吧,就是9了
- 现在十位上的数被借走一位,所以要减一变成了1,然后再用1减2,又发现不够减了,当然也是和上面一样,这里就不再那么啰嗦了,最后就是答案了 99,没毛病吧。
- 这个大概看了下小学知识,下面就开始模拟这个过程。
模拟过程:
- 同样也是用数组去模拟,你可以认为数组是 ‘万能’ 的,如果学了数据结构就知道了,什么链表,栈,队列,树等都是可以用数组去模拟的
- 先创建三个数组 a[1000], b[1000], c[1000].两个用来存放被减数和减数,一个用来存放最后答案
- 同样是用字符串形式去输入,如果你要用整型的就会出错,几百位的数都爆掉了,所以只能用字符串的形式去输入。
- 我们是从个位数去减的,然而输入是从头去输入的,所以要经过反转
for (int i = 0; i < str1.size(); i ++)
a[i] = str1[str1.size()-1-i] - '0'; // 反转123
for (int i = 0; i < str2.size(); i ++)
b[i] = str2[str2.size()-1-i] - '0'; // 反转24
- 反转的时候我们顺便转化为整型,因为肯定不能用字符串去做减法是吧。
- 现在已经做了个初步算法,下面就可以去模拟减法了,其实这里也是要和高精度加法一样先求长度,不然就不好控制下面的循环
int len = max(str1.size


2989

被折叠的 条评论
为什么被折叠?



