下面的 C++ 代码段用于计算1到N之间且包含N的所有数字中含有的3的个数,如1到40含有14个3, 而1到20则 只含有2个3。如果将 while (i != 0) 改为 while (abs(i)) ,则执行结果相同。( )
A:正确
B:错误
正确答案:正确
答案解析
遍历从1到N的每个整数k,对每个k通过循环取其十进制下的每一位数字:用i % 10获取当前位,判断是否为3,若是则计数加1;然后i /= 10,直到i变为0。原条件while (i != 0)在i为正时能正确处理每一位。改为while (abs(i))后,由于k为正整数,i初始值为正,过程中i /= 10向零截断,i始终非负,abs(i)与i等价,循环条件行为不变。且i不会为负,故abs(i)与i在控制循环次数上完全一致。两种写法在该上下文中对所有正整数k的处理过程相同,每位数字仍会被检查且仅一次。
试卷来源:202603 CCF-GESP编程能力等级认证C++二级真题