注:题目改编自《算法(第四版)》 T1.1.14
个人的解题思路:对照对数函数的定义式,N的取值情况有四种
①N <= 0, 无法计算。
②N =1, log2(1) = 0, 结果为0 。
③0<N<1, log2(N)为负数,结果为负数。 当(1/2.0)的k次方小于N,k即为所求。
④N>1, log2(N)为正数,值为0或者正数。当N开2的k次方小于1时,k-1即为所求。
基于java的算法实现:
public class log {
/**
* 使用Math库
* @param N
* @return
*/
public static int lg(double N)
{
//2^x = N ==> x = l