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

题目链接:面试题 05.02. 二进制数转字符串

方法:找规律

解题思路

(1)题目要求:将一个01之间的实数通过二进制进行表示,并通过字符串形式输出。
(2)由于二进制的小数只能表示121418...12n数之间的和的十进制小数,因此有些十进制小数不能通过二进制进行表示,结果就返回ERROR
(3)现在假设能被二进制小数表示,那么二进制的每一位可能为0/1value = 当前位置置1的十进制的值,当num>value时那么当前位置置1,否则置0(返回str+= '0' / '1'),然后num=value,检查下一位的情况,直到6位检查完,若num!=0,说明不能转换,否则返回str

代码

class Solution {
public:
    string printBin(double num) {
        double value = 1.0;
        int i = 1;
        string ans = "0.";
        while (num != 0.0 && i <= 6) {
            value /= 2.0;
            if (num >= value) {
                num -= value;
                ans += "1";
            } else {
                ans += "0";
            }
            i ++ ;
        }
        if (num != 0.0) return "ERROR";
        else return ans;
    }
};
// 另一种思路(意思相同)
class Solution {
public:
    string printBin(double num) {
        string ans = "0.";
        for(int i = 1; i <= 6; i ++ ) {
            num *= 2;
            if (num >= 1) {
                num -= 1;
                ans += "1";
            } else {
                ans += "0";
            }
            if (num == 0) return ans;
        }
        return "ERROR";
    }
};

复杂度分析

时间复杂度:O(1)
空间复杂度:O(1)

posted @   lixycc  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示