下面 C++ 代码能实现正整数各位数字之和。( )
int N, Sum = 0;
cin >> N;
while (N){
Sum += N % 10;
N /= 10;
}
cout << Sum;答案A。while循环先判断条件再执行,可能一次都不执行。do-while至少执行一次。
while先判断后执行,可能0次。do-while先执行后判断,至少1次。
【考点】循环控制|取模运算|数字拆分
🎯 考纲定位:GESP二级编程基础模块(循环结构与取模运算)。命题人把"各位数字之和"这种数学概念转化为循环求和,卡住的是考生对while条件判断和取余逻辑的混淆——很多初学者会写成while(N!=0)却忘记更新N,或者把N%10误当作字符串处理。
🧠 解题思维:核心是"每次取个位(N%10)累加,再去掉个位(N/=10)"。while(N)对正整数等价于while(N!=0),循环终止条件天然满足。这类题的通法是:遇到"数字拆分/累加"类问题,优先用取模和整除构造循环,避免字符串转换带来的额外开销。
🪤 陷阱拆解:选项B是"错误"陷阱。命题人故意把代码写得简洁,让考生误以为"循环条件while(N)对正整数不安全"或"N/=10会丢失数据",其实while(N)对int类型正数完全合法,N/=10正是数字拆分的关键。如果你只背"循环要用!=0"的结论,就会掉进这个"条件写法"的陷阱。
🔄 反命题思维:若把while(N)改为while(N>0),代码逻辑不变,答案仍为A;若把N/=10改为N=N%10,则陷入死循环,答案变B。刷到类似题先问自己:命题人想考我"循环终止条件"还是"数字拆分步骤"?