二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字不在0和1之间,或者无法精确地用32位以内的二进制表示,则打印“ERROR”。
示例1:
**
输入:0.625
输出:”0.101”
示例2:
**
输入:0.1
输出:”ERROR”
提示:0.1无法被二进制准确表示
提示:
- 32位包括输出中的”0.”这两位。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bianry-number-to-string-lcci
思路:
本题考察的知识点是十进制小数转二进制小数,数电里教过怎么计算:使用乘二取整法。
以实例1为例:
0.625 2 —> 1.25 —> 取1 —> 0.1
1.25 对1取余得 0.25
0.25 2 —> 0.5 —> 取0 —> 0.10
0.5 对1取余得 0.5
0.5 *2 —> 1.0 —> 取1 —> 0.101
1.0 对1取余得 0 —>结束循环
需要注意本题有限制32位。
复杂度分析:
时间复杂度O(1) 循环次数是常数
空间复杂度O(1) 只用常数大小的辅助空间
/**
* @param {number} num
* @return {string}
*/
var printBin = function(num) {
let str = '0.'
let digit = 30;
while(num >0 && digit){
num *= 2;
if(num >= 1){
str += 1;
num -= 1;
}else{
str += 0;
}
digit -= 1;
}
return num !==0 ? 'ERROR' : str;
};