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

链接

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

题目

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

示例

示例1:
 输入:0.625
 输出:"0.101"


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

说明

  • 32位包括输出中的 "0." 这两位。
  • 题目保证输入用例的小数位数最多只有 6 位

思路

小数的二进制表示方法为:将十进制小数*2,得到的积的整数部分取出顺序排放,再将乘下的小数部分*2,得到的积的整数部分继续取出顺序排放,以此类推,直到积中的小数部分为零。

例如,例1中的0.625的结果为0.101,计算步骤如下:0.625*2=1.25,将1取出,得到结果0.1,将剩下的部分0.25继续*2,得到0.5,将0取出,得到结果0.10,再将剩下的部分0.5*2,得到1.0,将1取出,得到结果0.101,此时积中的小数部分等于0,计算结束,结果就是0.101

我们根据以上方式进行模拟即可。

Java Code

class Solution {
    public String printBin(double num) {
        String ans = "0.";
        while(ans.length()<=32 && num!=0){
            num*=2;
            if(num>=1){
                ans+="1";
                num-=1;
            } else ans+="0";
        }
        return ans.length()<= 32 ? ans:"ERROR";
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值