漂亮数的定义是:如果 $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。追踪程序输出时注意整数除法截断和循环条件的边界值。变量初始值对结果影响很大。
整数除法截断容易忽略!if(n%i==0)中%是取余运算不是除法。
【考点】输入输出|循环控制|变量作用域|取模运算
本题出自 GESP 二级 C++ 模块"算法基础",核心考点是循环中的变量修改与原始值保留。命题人故意让 while 循环把 N 不断除以 10,直到变成 0,再在循环外用 N%M 判断整除,就是专门卡住初学者"循环会改变变量,但后续还要用原值"的盲区。