C++代码仅处理首个测试用例输入的问题排查求助
问题排查与修复方案
嘿,你的代码之所以只能处理首个测试用例,核心问题是没有处理数字中包含0的情况——当输入的数字某一位是0时,执行d % b == 0会触发除以零的未定义行为,直接导致程序崩溃终止,后面的测试用例自然没机会执行了。
举个实际场景:如果第一个测试用例输入的n是10,分解数字时会得到b=0,此时10 % 0会直接让程序挂掉,后续的循环根本跑不起来。
另外还有个小细节可以优化:你在内部循环里直接修改了外层的n变量,虽然当前逻辑下cin会重新赋值,但这种写法很容易搞混,建议用临时变量来遍历数字的每一位。
修复后的完整代码
#include <bits/stdc++.h> using namespace std; int main() { int t, n, c, d, temp, b; cin >> t; while (t-- > 0) { // 简化循环条件,写法更简洁 c = 0; cin >> n; d = n; temp = n; while (temp != 0) { b = temp % 10; temp /= 10; // 关键:先判断b不为0,再做取余判断 if (b != 0 && d % b == 0) { c++; } } cout << c << "\n"; } return 0; }
主要修复点说明
- 新增除以零防护:在执行取余操作前,先检查
b != 0,跳过数字中的0位,彻底避免除以零的崩溃问题。 - 改用临时变量遍历:用
temp代替原n分解数字,保持输入的n不受修改,代码逻辑更清晰,减少出错概率。 - 简化循环条件:把
while(t>0)改成while(t-- >0),写法更简洁,效果一致。
这样修改后,不管输入多少个测试用例,哪怕数字里包含0,程序都能正常处理所有用例了。
内容的提问来源于stack exchange,提问作者PGreen_xyz
相关产品推荐
相关产品推荐

