GESP 二级 · GESP 202512 C++ 二级 第 13 题

选择题 · 答案 B · 考点:输入输出、循环控制

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

题目

漂亮数的定义是:如果 $N$ 能被 $M$ 整除,或者某位是 $M$,或者 $N$ 的每位数之和能被 $M$ 整除,则说 $N$ 是 $M$ 的漂亮数。如果三个条件都满足,则是完整漂亮数。123 是 3 的完整漂亮数,因为 123 能被 3 整除,也含有 3,其每位数之和为 6 也能被 3 整除。下面的代码用于判断 $N$ 是否为 $M$ 的完整漂亮数并输出。相关说法正确的是( )。

int N, M, Flag, Sum, num;
cout << "请输入N, 不等于0的正整数: ";
cin >> N;
cout << "请输入M: M必须大于1小于9: ";
cin >> M;

Sum = 0; // 记录各位数之和
Flag = 0; // 假设记录N不含有M

while (N != 0) {
    num = N % 10;
    Sum += num;
    if (num == M)
        Flag = 1;
    N /= 10;
}

if ((N % M == 0) && (Flag == 1) && (Sum % M == 0)) // L1
    printf("%d 是 %d 的完整漂亮数", N, M);
else
    printf("%d 不是 %d 的完整漂亮数", N, M);
答案:B

考点

输入输出循环控制

解题思维

答案B。追踪程序输出时注意整数除法截断和循环条件的边界值。变量初始值对结果影响很大。

常见错误

整数除法截断容易忽略!if(n%i==0)中%是取余运算不是除法。

详细解析(节选)

【考点】输入输出|循环控制|变量作用域|取模运算

1. 🎯 考纲定位

本题出自 GESP 二级 C++ 模块"算法基础",核心考点是循环中的变量修改与原始值保留。命题人故意让 while 循环把 N 不断除以 10,直到变成 0,再在循环外用 N%M 判断整除,就是专门卡住初学者"循环会改变变量,但后续还要用原值"的盲区。

同考点真题

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