要实现一个高精度减法函数,则下面代码中加划线应该填写的代码为( )。
//假设a和b均为正数,且a表示的数比b大
vector<int> minus(vector<int> a, vector<int> b) {
vector<int> c;
int len1 = a.size();
int len2 = b.size();
int i, t;
for (i = 0; i < len2; i++) {
if (a[i] < b[i]) { //借位
______________ // 在此处填入代码
}
a[i] += 10;
t = a[i] - b[i];
c.push_back(t);
}
for (; i < len1; i++)
c.push_back(a[i]);
len3 = c.size();
while (c[len3 - 1] == 0) {//去除前导0
c.pop_back();
len3--;
}
return c;
}STL 容器:vector(动态数组)、set/map(红黑树,有序)、unordered_set/map(哈希表,无序)。注意迭代器失效问题。
填空时注意语法完整性:分号、括号匹配、函数参数类型和个数、返回值类型。
本题卡住的是"借位方向"这一高频易错点。GESP五级算法模块明确要求掌握高精度运算,命题人特意用"a[i]<b[i]"的条件,逼你必须在 a[i+1] 上做减法,否则进位逻辑全崩。
看到 a[i]<b[i] 必须借位 → 借位意味着从高位 a[i+1] 减1 → 代码里只有 a[i+1]-- 能实现这个效果。a[i]-- 是减当前位,b[i]-- 是减被减数,都不符合减法定义。