G
N
I
D
A
O
L

题目链接:https://leetcode.cn/problems/bianry-number-to-string-lcci/

# 法一

直接模拟计算,直到超出,具体看源码

class Solution {
    public String printBin(double num) {
        char[] chs = String.valueOf(num).toCharArray();
        int n = chs.length;
        // 题目保证最后只有 6 位小数,因此最多循环 10 次
        final int N = 10;
        // 被减数
        int a;
        // 减数
        int b = 5;
        // 余数
        int d = 0;
        
        StringBuilder sb = new StringBuilder("0.");
        for (int i = 0; i < N; ++i) {
            a = d * 10 + (i + 2 < n ? chs[i + 2] - '0' : 0);
            if (a >= b) {
                sb.append(1);
                d = a - b;
                if (a == b && i + 2 == n - 1) break;
            } else {
                sb.append(0);
                d = a;
            }
            b *= 5;
        }
        return d == 0 ? sb.toString() : "ERROR";
    }
}

# 提交结果

# 法二

# 解题思路

总结归纳:一直乘以 2,直到变成 1,或者无线循环下去;因为题目要求,故仅需要循环 30 次即可。

# 提交结果

image.png

# 源码

class Solution {
    public String printBin(double num) {
        StringBuilder res = new StringBuilder("0.");
        while (res.length() <= 32 && num != 0) {
            num *= 2;
            if (num >= 1) {
                res.append(1);
                num -= 1;
            } else {
                res.append(0);
            }
        }
        return res.length() > 32 && num != 0 ? "ERROR" : res.toString();
    }
}
更新于 阅读次数

😉觉得写的还不错,请我喝杯咖啡吧😁

独步凌波 微信支付

微信支付

独步凌波 支付宝

支付宝