统计能整除数字的不同数位数量——代码无法通过全部测试用例
问题分析与代码修正
核心错误
你的代码存在两个关键问题:
- 修改原始输入值导致判断逻辑错误:循环中直接修改了
num变量,后续判断整除时用的是被截断后的数字,而非题目要求的原始输入num。以输入54为例:- 第一次循环:num=54,取最后一位4,54%4=2≠0,不加入集合;num变为5。
- 第二次循环:num=5,取最后一位5,此时用当前的5判断5%5=0,错误将5加入集合,但实际原始数54%5=4≠0,不符合条件。
- 未处理数位为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
相关产品推荐
相关产品推荐

