如何在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; }
修复说明
- 新增边界处理:针对n=1、非正整数这类特殊场景做了明确判断,避免逻辑混乱
- 移除错误的
pow++:保证每次循环都是计算n的幂次序列(n→n²→n³→...) - 添加溢出防护:当
pow > m/n时,再乘以n会超过m或者超出int的取值范围,直接跳出循环避免错误计算 - 调整循环判断顺序:先检查当前pow是否等于m,再执行乘法,逻辑更清晰
测试isPower(625,5)时,循环会依次计算5→25→125→625,当pow等于625时返回true,符合预期。
内容的提问来源于stack exchange,提问作者Zeynab Moghaddas
相关产品推荐
相关产品推荐

