确定给定整数的最大2的幂

时间:2016-04-07 19:18:05

标签: java debugging

当我使用n = 64运行此方法时,它给出了x = 64,但它不运行if语句而是运行else语句。实际答案需要为32,但它返回64。

3 个答案:

答案 0 :(得分:0)

将测试乘以2乘以直到得到一个不小于目标的数字,然后返回前一个数字

public int largestPowerOf2(int n){
    int mul = 1;
    int lastWorkingSolution = 0;
    while(true){
        if(mul >= n)
            return lastWorkingSolution;
        else{
            lastWorkingSolution=mul;
            mul*=2; 
        }
    }
}

答案 1 :(得分:0)

这是做同样事情的一种相当简单的方法。只需循环2的幂,直到你达到大于或等于n的那个。然后,只需从电源中减去1即可得到最后一个工作示例并返回该有效值。

private static int largestPowerOf2(int n) {
    int power = 1;
    int value = (int)Math.pow(2, power);
    while (value < n) {
        power++;
        value = (int)Math.pow(2, power);
    }

    power--;

    return (int)Math.pow(2, power);
}

答案 2 :(得分:0)

这应该有用。

public int largestPowerOf2(int n){

    return Integer.highestOneBit(n-1);

}