如何找到比给定数字小2的最大幂

2022-09-04 23:43:10

我需要找到比给定数字小2的最大幂。
我坚持了下来,找不到任何解决方案。

法典:

public class MathPow {
   public int largestPowerOf2 (int n) {
        int res = 2;        
        while (res < n) {
            res =(int) Math.pow(res, 2);
        }
        return res;
   }
}

这无法正常工作。

测试输出:

Arguments Actual Expected
-------------------------
9         16     8       
100       256    64      
1000      65536  512     
64        256    32      

如何解决这个问题?


答案 1
Integer.highestOneBit(n-1);

因为这个问题并没有真正的意义。在这个范围内做什么留给感兴趣的读者。n <= 1

这是Hacker's Delight中位微调算法的一个很好的集合。


答案 2

更改为 This 将返回比 res 大 2 的下一个幂。
因此,您要查找的最终结果将最终在时间结束后。res =(int)Math.pow(res, 2);res *= 2;res / 2

为了防止代码溢出int值空间,您应该/可以将res的类型更改为双倍/长整倍,任何可以容纳比int更高的值。最后,你必须施放一次。