题目描述:
给定一个正整数n
,求将n
转换为二进制后有多少位?
例如:10转换为二进制后为1010,共有4位。
思路分析:
根据抽象问题具体化,具体问题特殊化的思考原则,我们先列举几个例子:
2^1 = 2 -> 10 -> 2 11->3=2^2-1
2^2 = 4 -> 100 -> 3 111->7=2^3-1
2^3 = 8 -> 1000 -> 4 1111->15=2^4-1
2^4 = 16 -> 10000 -> 5 11111->31=2^5-1
由以前例子可以总结出以下规律:
如果一个二进制数字
b
有x
位,那么b能表示的最小值为2^(x-1)
,b能表示的最大值为2^x-1
。即2^(x-1) ≤ b ≤ 2^x-1
因此,我们只要计算出给定的正整数n
是2
的多少次方即可。即y=log(2, n)
。
代码实现:
/**
* 计算一个整数转换为二进制后有多少位
* 比如:8转换为二进制后为1000,共有4位;
* 31转换为二进制后为 11111,共有5位
*/
public double getBinaryBit(int n) {
double log2_n = Math.log(n) / Math.log(2);
double bits = Math.floor(log2_n + 1);
return bits;
}
总结:
本题解法采用了抽象问题具体化,具体问题特殊化的思维方式,推导出了问题的一般规律,然后利用Java的Math.log()
API 解决了问题。
网友评论