【发布时间】:2020-09-08 23:38:04
【问题描述】:
这是interview question:“给定 2 个整数 x 和 y,检查 x 是否是 y 的整数幂”(例如,对于 x = 8 和 y = 2,答案是“真”,对于 x = 10和 y = 2“假”)。
显而易见的解决方案是:
int n = y; while(n < x) n *= y; return n == x
现在我正在考虑如何改进它。
当然,我可以检查一些特殊情况:例如x 和 y 都应该是奇数或偶数,即我们可以检查 x 和 y 的最低有效位。但是我想知道我是否可以改进核心算法本身。
【问题讨论】:
-
实际上,我认为显而易见的解决方案是将 x 除以 y,然后将结果除以 y 不断,直到达到一个不能被 y 整除的数字。如果该数字为 1,则 x 是 y 的幂。
-
不幸的是,这里没有一个用户注意到发布的每段代码都在 x = ±1 时惨遭失败
-
不,我的适用于 x = +1(并且一个微不足道的 abs 修复了负数)。但是现在 y == 0。