GESP 一级 · GESP 202509 C++ 一级 第 13 题

选择题 · 答案 D

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

题目

下面 C++ 代码用于获得正整数 $N$ 的第 $M$ 位数,约定个位数为第 1 位,如 $N$ 等于 $1234$,$M$ 等于 $2$,则输出 $3$。假设 $M$ 的值是大于等于 $1$ 且小于等于 $N$ 的位数。横线处应填入的代码是( )。

int N, M, div=1;
cout << "请输入一个正整数:";
cin >> N;
cout << "请输入从右到左取第几位数:";
cin >> M;
for (int i = 0; i < (M - 1); i++) div *= 10;
cout << (_____________);
答案:D

解题思维

答案D。先分析已有代码的功能,确定输出目标,再反推横线处需要的代码。可用代入法验证。

常见错误

将每个选项代入横线处验证是最可靠的方法。注意代码的完整逻辑和输出格式。

详细解析(节选)

【考点】整数除法|取模运算|数位提取

解题核心是"移位 + 取个位":先通过循环把 div 算成 $10^{M-1}$,再执行 N / div % 10。因为 div 把目标数位右移到个位,% 10 就只剩它本身。

选项陷阱:

反命题视角: 如果把 M 改成"从左数第几位",就得先求总位数再算 div = 10^(总位数 - M); 或者要求"前 M 位数字之和",就要在循环里累加每次 % 10 的结果。

最后提醒:看到"第几位"的题,先确认是从左还是从右,再决定除法和取模的顺序。

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