You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:53:21