GESP 二级 · GESP 202409 C++ 二级 第 12 题

选择题 · 答案 A

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

题目

下面 C++ 代码执行后输出逆序数。如输入 123 则输出 321。如输入 120 则输出 21。横线处先后应填入的代码是( )。

int N;
cin >> N;
int rst = 0;
while (N) {
    _________________;
    _________________;
}
cout << (rst);
答案:A

解题思维

答案A。循环补全要分析循环变量的初始值、条件和更新方式,确保能产生目标输出。

常见错误

代入法验证时注意选项之间的细微差别。循环条件中的<和<=可能导致完全不同的结果。

详细解析(节选)

【考点】整数运算|取模除整|数字逆序

考纲定位:GESP二级"数据类型与运算"模块经典题,命题人卡住的是"不会把整数拆成数字再拼回去"的底层弱点。二级算法题里此考点常与简单循环结合,是入门必备。

解题思维:看到"逆序数"先想个位提取(N%10)→暂存→再除尽(N/10);循环里每轮把rst左移一位(*10)再塞入新个位,N耗尽时rst就是反向数。N=120时最后一位0会被加入rst,但中间0不影响逆序结果。若误用rst+=N%10,输出会变成数字之和而非逆序。

陷阱拆解:B选项rst+=N%10只累加数字,C选项rst=rst*10+N/10把商当个位,D选项rst+=N/10更离谱;最阴险处是"先乘10再加"顺序颠倒,很多人背结论会漏掉乘10这步。C选项尤其迷惑,因为N/10是十位,但rst*10+N/10实际是把十位加到rst末尾,导致错位。很多考生会选D,因为N/10看起来像是取十位,但rst+=N/10毫无意义。A选项是唯一符合"提取-构造-除尽"三步的,其余都破坏了位值关系。

反命题思维:若N为负数则while(N)直接跳出输出0,若把更新顺序改成分支条件rst= rst/10+N%10,就变成求和而非逆序——类似题先问"命题人想考我什么"。若把N改为字符串再反转,考点就变成字符串处理,难度陡增。

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