列表

详情


面试题 05.02. 二进制数转字符串

二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。

示例1:

 输入:0.625
 输出:"0.101"

示例2:

 输入:0.1
 输出:"ERROR"
 提示:0.1无法被二进制准确表示

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: string printBin(double num) { } };

cpp 解法, 执行用时: 0 ms, 内存消耗: 6 MB, 提交时间: 2022-11-18 10:47:06

class Solution {
public:
    string printBin(double num) {
        string ans = "0.";
        while (num != 0) {
            num *= 2;
            if (num >= 1) { //乘2后num>=1,说明此时整数部分为1,取完该整数部分1后,num接着利用的还是其小数部分,所以要减掉整数部分(即1)
                ans += "1";
                num -= 1;
            } else { //小于1说明整数部分为0,取该整数部分0
                ans += "0";
            }
            if (ans.size() > 32) return "ERROR";
        }
        return ans;
    }
};

java 解法, 执行用时: 0 ms, 内存消耗: 38.6 MB, 提交时间: 2022-11-18 10:46:21

class Solution {
    public String printBin(double num) {

        String ans = "0.";
        while (num != 0) {
            num *= 2;
            if (num >= 1) { //乘2后num>=1,说明此时整数部分为1,取完该整数部分1后,num接着利用的还是其小数部分,所以要减掉整数部分(即1)
                ans += "1";
                num -= 1;
            } else { //小于1说明整数部分为0,取该整数部分0
                ans += "0";
            }
            if (ans.length() > 32) return "ERROR";
        }
        return ans;
    }
}

golang 解法, 执行用时: 0 ms, 内存消耗: 1.8 MB, 提交时间: 2022-11-18 10:40:21

func printBin(num float64) string {
    a, k, s := 0.5, 1, 0.0
    t := "0."
    for s != num {
        if num - s >= a {
            t += "1"
            s += a
        } else {
            t += "0"
        }
        k++
        a *= 0.5
        if k > 30 {
            return "ERROR"
        }
    }
    return t
}

python3 解法, 执行用时: 44 ms, 内存消耗: 15 MB, 提交时间: 2022-11-18 10:36:51

class Solution:
    def printBin(self, num: float) -> str:
        a = 0.5
        k = 1
        s = 0.0
        t = '0.'
        while s != num:
            if num - s >= a:
                s = s + a
                t += '1'
            else:
                t += '0'
            k += 1
            a = 0.5 ** k
            if k > 30:
                return "ERROR"
        return t

上一题