二进制数转字符串。给定一个介于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) 只用常数大小的辅助空间

    1. /**
    2. * @param {number} num
    3. * @return {string}
    4. */
    5. var printBin = function(num) {
    6. let str = '0.'
    7. let digit = 30;
    8. while(num >0 && digit){
    9. num *= 2;
    10. if(num >= 1){
    11. str += 1;
    12. num -= 1;
    13. }else{
    14. str += 0;
    15. }
    16. digit -= 1;
    17. }
    18. return num !==0 ? 'ERROR' : str;
    19. };