GESP 五级 · GESP202609 C++ 五级 第 15 题

选择题 · 答案 C · 考点:循环控制

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

题目

数组 a 和 b 按低位在前的顺序保存两个非负大整数。下面代码实现高精度加法,横线处应填写 (  )。

vector<int> add(const vector<int> &a, const vector<int> &b) {
vector<int> c;
int carry = 0;
int n = max(a.size(), b.size());
for (int i = 0; i < n; i++) {
int sum = carry;
if (i < a.size())
sum += a[i];
if (i < b.size())
sum += b[i];
c.push_back(sum % 10);
____________________
}
if (carry)
c.push_back(carry);
return c;
}
答案:C

考点

循环控制

解题思维

高精度加法核心在于逐位相加并处理进位。本题代码已正确计算当前位数字(sum % 10)存入 c,横线处必须更新进位变量。由于 sum 是当前位累加总值(含上一位进位),进位应取 sum 除以 10 的整数部分,即 carry = sum / 10。这是高精度加法最基础的进位规则,后续循环迭代依赖此更新。

常见错误

选项 A 把进位设为余数,混淆了"当前位数字"与"进位";选项 B 直接赋值 sum,进位会爆炸式增长;选项 D 用刚存入的 c[i] 计算,但 c[i] 已是余数,除以 10 恒为 0,导致后续进位全错。命题人特意把 sum % 10 的写法放在上一行,诱导考生误选 A。

详细解析(节选)

高精度加法核心在于逐位相加并处理进位。本题代码已正确计算当前位数字(sum % 10)存入 c,横线处必须更新进位变量。由于 sum 是当前位累加总值(含上一位进位),进位应取 sum 除以 10 的整数部分,即 carry = sum / 10。这是高精度加法最基础的进位规则,后续循环迭代依赖此更新。

选项 A 把进位设为余数,混淆了"当前位数字"与"进位";选项 B 直接赋值 sum,进位会爆炸式增长;选项 D 用刚存入的 c[i] 计算,但 c[i] 已是余数,除以 10 恒为 0,导致后续进位全错。命题人特意把 sum % 10 的写法放在上一行,诱导考生误选 A。

1. 考纲定位

本题考查《GESP 考试大纲》五级"算法与程序设计"模块中的高精度运算与循环控制。命题人放这道题,就是要卡住考生对"进位更新时机"的理解——绝大多数人知道要进位,但容易把进位和当前位数字搞混。

同考点真题

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