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

求助:判断质因数仅含2、3、5的代码出现signed integer overflow错误

解决质因数检查程序的整数溢出问题

错误原因

报错的核心问题是:当输入的n为int类型的最小值(-2147483648)时,执行n = n * (-1)会触发有符号整数溢出。因为int类型的取值范围是-2147483648到2147483647,-2147483648取反后得到的2147483648超出了int的最大值,无法被存储,从而引发运行时错误。

另外,原代码还存在逻辑漏洞:负数的质因数必然包含-1,不符合“仅含2、3、5”的要求;同时未处理n=0的情况(0没有质因数,也不符合条件)。

修复后的代码

bool check(int n)
{
    // 负数、0直接返回false,无需后续处理
    if (n <= 0)
        return false;
    
    // 反复除以2,直到无法整除
    while (n % 2 == 0)
        n /= 2;
    // 反复除以3,直到无法整除
    while (n % 3 == 0)
        n /= 3;
    // 反复除以5,直到无法整除
    while (n % 5 == 0)
        n /= 5;
    
    // 最终结果为1,说明所有质因数只有2、3、5
    return n == 1;
}

关键修改点

  • 移除负数转正数逻辑:直接判定负数不符合条件,从根源避免了整数溢出问题。
  • 简化循环逻辑:用三个独立的while循环分别处理2、3、5的整除操作,去掉了冗余的count变量,代码更直观。
  • 补充边界处理:新增n<=0的判断,覆盖了0和负数的特殊情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:31:05