编写一个静态方法lg(),接收一个整型参数N,返回不大于log2(N)的最大整数。

/**
     * 将lg2(N)转换为2(N)指数函数来计算。
     * @param n
     * @return
     */    
    public static int lg(int n) {
        int k = 0;
        int tmp = 1;
        while(tmp <= n) {
            tmp *= 2;
            k++;
        }
        return k - 1;
    }

 

扩展:

将整型参数N改为double型参数N,返回不大于log2(N)的最大整数。

public static int lg(double n) {
        int k = 0;
        double tmp = 1;
        if (n > 1) {
            while(tmp <= n) {
                tmp *= 2;
                k++;
            }
            k -= 1;
        }
        else {
            while(tmp >= n) {
                tmp /= 2;
                k--;
            }
            k += 1;
        }
        
        return k;
    }
    
    public static void main(String[] args) {
        System.out.println("k = " + lg(8));
    }

你可能感兴趣的:(Algorithm)