下面 C++ 代码执行后输出逆序数。如输入 123 则输出 321。如输入 120 则输出 21。横线处先后应填入的代码是( )。
int N;
cin >> N;
int rst = 0;
while (N) {
_________________;
_________________;
}
cout << (rst);答案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改为字符串再反转,考点就变成字符串处理,难度陡增。