问题
编写一个静态方法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
来源:CSDN
作者:枫竹梦
链接:https://blog.csdn.net/himayan46/article/details/104608840