算法-第四版-练习1.1.14解答

人盡茶涼 提交于 2020-03-03 05:30:37

问题

编写一个静态方法lg(),接受一个整型的参数N,返回不大于log2N的最大整数。不要使用Math库。

解决思路

首先考虑非负数,不大于log2N的最大整数与这个数二进制位中最高位在右起第几位相关,可以使用右移位操作得到它在哪一位。
对于负数我们直接返回0。

代码

package com.furzoom.lab.algs.ch101;

public class E10114
{

    public static int lg(int n)
    {
        int i = 0;
        while ((n >>= 1) > 0)
            i++;
        return i;
    }
    
    public static void main(String[] args)
    {
        System.out.println(lg(1));
        System.out.println(lg(2));
        System.out.println(lg(3));
        System.out.println(lg(13));
        System.out.println(lg(17));
        System.out.println(lg(65536));
        System.out.println(lg(-1));
    }

}

结果

0
1
1
3
4
16
0
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!