题目:编写一个静态方法lg(),接受一个整形参数N,返回不大于log2(N)的最大整数,不使用Math库。
代码1:
public static int log2(int N) {
int x = 0,pow = 1;
while(pow<=N) {
pow *= 2;
x++;
}
return x-1;
}
代码2:(思路和代码1相同,但没有1容易理解)
public static int log2(int N) {
int ans = 0;
while(N>1) {
N /= 2;
ans++;
}
return ans;
}
笔记:
一开始看到“不大于xx的最大整数”,直接想到二分法,但是这道题由于ans的取值范围基本在0~40之间,区间并不大,因此用类似迭代循环的方法反而比较简洁易懂。相反,二分法好像并不合适。