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

如何在Java中编写判断整数是否为另一整数幂的函数?代码排查

修复判断整数幂的isPower函数

你的代码存在几个关键问题,导致无法正确判断625这类5的幂:

  • 初始条件错误:当m == n时(比如m=5,n=5),这是n的1次幂,应该返回true,但原代码直接返回false
  • 致命的pow++操作:每次计算完n * pow后加1,彻底打乱了幂的计算序列。比如计算5的幂时,本该是5→25→125→625,加1后变成5→26→131→...永远到不了目标值
  • 循环逻辑顺序问题:先执行乘法再判断,虽然部分情况能工作,但结合初始条件的错误,会漏掉一些场景

修复后的代码

public static boolean isPower(int m, int n) {
    // 处理n=1的特殊情况:只有1是1的幂
    if (n == 1) {
        return m == 1;
    }
    // 排除非正整数的无效输入
    if (m < 1 || n <= 0) {
        return false;
    }
    
    int pow = n;
    while (pow <= m) {
        if (pow == m) {
            return true;
        }
        // 提前判断是否会溢出或超过m,避免整数溢出问题
        if (pow > m / n) {
            break;
        }
        pow = n * pow;
    }
    return false;
}

修复说明

  1. 新增边界处理:针对n=1、非正整数这类特殊场景做了明确判断,避免逻辑混乱
  2. 移除错误的pow++:保证每次循环都是计算n的幂次序列(n→n²→n³→...)
  3. 添加溢出防护:当pow > m/n时,再乘以n会超过m或者超出int的取值范围,直接跳出循环避免错误计算
  4. 调整循环判断顺序:先检查当前pow是否等于m,再执行乘法,逻辑更清晰

测试isPower(625,5)时,循环会依次计算5→25→125→625,当pow等于625时返回true,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:10:05