GESP 五级 · GESP 202406 C++ 五级 第 12 题

选择题 · 答案 A

← 整套速查表 GESP 五级 全部真题

题目

要实现一个高精度减法函数,则下面代码中加划线应该填写的代码为( )。

//假设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;
}
答案:A

解题思维

STL 容器:vector(动态数组)、set/map(红黑树,有序)、unordered_set/map(哈希表,无序)。注意迭代器失效问题。

常见错误

填空时注意语法完整性:分号、括号匹配、函数参数类型和个数、返回值类型。

详细解析(节选)

1. 🎯 考纲定位(考点定位)

本题卡住的是"借位方向"这一高频易错点。GESP五级算法模块明确要求掌握高精度运算,命题人特意用"a[i]<b[i]"的条件,逼你必须在 a[i+1] 上做减法,否则进位逻辑全崩。

2. 🧠 解题思维(拆解与通法)

看到 a[i]<b[i] 必须借位 → 借位意味着从高位 a[i+1] 减1 → 代码里只有 a[i+1]-- 能实现这个效果。a[i]-- 是减当前位,b[i]-- 是减被减数,都不符合减法定义。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断