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

选择题 · 答案 A

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

题目

一个数的所有数字倒序排列后这个数的大小保持不变,这个数就是回文数,比如 $101$ 与 $6886$ 都是回文数,而 $100$ 不是回文数。以下程序代码用于判断一个数是否为回文数,横线处应填写?( )

int n,a,k;
cin >> n;
a = 0;
k = n;
while (n > 0){
    a = _________; // 在此处填写代码
    n /= 10;
}
if (a == k)
    cout << "是回文数";
else
    cout << "不是回文数";
答案:A

解题思维

这题考的是数字反转的核心算法:取模得个位,乘十位左移。拿到题先想循环里n怎么变(右移),a怎么变(左移加新位),代入初始值验证就能锁定答案。

常见错误

很多同学在判断回文数时容易混淆位值原理,看到n%10就本能地想直接相加(选项B),却忘了十进制里每一位都有权重,必须乘10左移才能把新数字拼到末尾。另外,选项C和D用了n/10,这是取十位及以上的数字,逻辑完全错误。还有些同学会纠结循环条件是否包含0,导致死循环,但本题while(n>0)本身没问题,主要是横线处的表达式写错。

详细解析(节选)

考点与命题视角

这道题属于GESP二级"循环与条件"中"循环中的累加操作"这一讲。命题人特意在"数字提取与累加"这个点上挖坑:80%的考生看到n%10就条件反射地选加法,却忽略了十进制位值原理要求先左移(乘10)。这种混淆是二级学生最容易栽跟头的地方,因为题目表面看只是填空,实则考的是对整数运算本质(取模得个位、乘十位左移)的理解,而非简单的语法记忆。

解题心法:从循环变量入手

拿到题先想:循环里n怎么变?条件while(n>0)保证n不断右移(n/=10),每次取走一个数字。那a怎么变?a初始为0,每次要把n的个位"拼"到a的末尾。十进制里,"拼到末尾"就是左移一位再相加:先乘10腾出个位空间,再加n%10。所以横线处必须是10*a + n%10。

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