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

统计能整除数字的不同数位数量——代码无法通过全部测试用例

问题分析与代码修正

核心错误

你的代码存在两个关键问题:

  1. 修改原始输入值导致判断逻辑错误:循环中直接修改了num变量,后续判断整除时用的是被截断后的数字,而非题目要求的原始输入num。以输入54为例:
    • 第一次循环:num=54,取最后一位4,54%4=2≠0,不加入集合;num变为5。
    • 第二次循环:num=5,取最后一位5,此时用当前的5判断5%5=0,错误将5加入集合,但实际原始数54%5=4≠0,不符合条件。
  2. 未处理数位为0的情况:如果输入包含0(比如10),直接计算num%0会触发除以0的运行时错误。

修正后的代码

class Solution {
public:
    int countDigits(int num) {
        set<int> uniqueDivisors;
        int originalNum = num; // 保存原始输入值,用于后续整除判断
        while (num > 0) {
            int digit = num % 10;
            // 跳过0(避免除以0),同时用原始数判断是否能整除
            if (digit != 0 && originalNum % digit == 0) {
                uniqueDivisors.insert(digit);
            }
            num /= 10;
        }
        return uniqueDivisors.size(); // 空集合自动返回0,无需额外判断
    }
};

关键改进点

  • 新增originalNum变量保存原始输入,确保判断逻辑始终基于题目给定的num。
  • 增加digit !=0的判断,避免除以0的异常。
  • 简化返回逻辑,直接返回集合大小(空集合size为0,符合预期)。

内容的提问来源于stack exchange,提问作者ShraavaniJha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:43:11