链接
题目
二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。
示例
示例1:
输入:0.625
输出:"0.101"
示例2:
输入:0.1
输出:"ERROR"
提示:0.1无法被二进制准确表示
说明
- 32位包括输出中的
"0."
这两位。- 题目保证输入用例的小数位数最多只有
6
位
思路
小数的二进制表示方法为:将十进制小数*2,得到的积的整数部分取出顺序排放,再将乘下的小数部分*2,得到的积的整数部分继续取出顺序排放,以此类推,直到积中的小数部分为零。
例如,例1中的0.625的结果为0.101,计算步骤如下:0.625*2=1.25,将1取出,得到结果0.1,将剩下的部分0.25继续*2,得到0.5,将0取出,得到结果0.10,再将剩下的部分0.5*2,得到1.0,将1取出,得到结果0.101,此时积中的小数部分等于0,计算结束,结果就是0.101
我们根据以上方式进行模拟即可。
Java Code
class Solution {
public String printBin(double num) {
String ans = "0.";
while(ans.length()<=32 && num!=0){
num*=2;
if(num>=1){
ans+="1";
num-=1;
} else ans+="0";
}
return ans.length()<= 32 ? ans:"ERROR";
}
}