题目
二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。
示例1:
输入:0.625
输出:“0.101”
解题思路
模拟
- 十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。
- 具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数 部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。
- 然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
例如把(0.8125)转换为二进制小数。
解:
代码
class Solution {
public String printBin(double num) {
StringBuilder ans = new StringBuilder("0.");
while (num != 0D && ans.length() <= 32) {
num *= 2;
if (num >= 1) {
ans.append(1);
num -= 1;
} else ans.append(0);
}
return ans.length() > 32 ? "ERROR" : ans.toString();
}
}