下面 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。先分析已有代码的功能,确定输出目标,再反推横线处需要的代码。可用代入法验证。
将每个选项代入横线处验证是最可靠的方法。注意代码的完整逻辑和输出格式。
【考点】整数除法|取模运算|数位提取
解题核心是"移位 + 取个位":先通过循环把 div 算成 $10^{M-1}$,再执行 N / div % 10。因为 div 把目标数位右移到个位,% 10 就只剩它本身。
选项陷阱:
N % div / 10:先取模把高位清零,再除 10,得到的是 M-1 位。N / div / 10:直接除两次,跳过了个位,得到 M+1 位。N % div % 10:当 M>1 时,N % div 已经是小于 div 的数,再 % 10 只会返回其个位,即第 1 位。反命题视角: 如果把 M 改成"从左数第几位",就得先求总位数再算 div = 10^(总位数 - M); 或者要求"前 M 位数字之和",就要在循环里累加每次 % 10 的结果。
最后提醒:看到"第几位"的题,先确认是从左还是从右,再决定除法和取模的顺序。