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

题目描述:

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

示例1:

输入:0.625

输出:"0.101"

示例2:

输入:0.1

输出:"ERROR"

提示:0.1无法被二进制准确表示

提示:

1、32位包括输出中的“0.”这两位。


解题思路:

将一个十进制介于0和1之间的实数转化为二进制的方法如下:

小数部分乘2,如果小数点前为1,计1;小数点前为0,计0;

对剩下的小数部分继续乘2……

代码如下:


public class ofot {

    public StringprintBin(double num) {

        if(num <0 || num >1.0)    return "ERROR";

        String ans ="0.";

        int bits =2;

        while(num >0) {

            num *=2;//*2 进制数

            if(num >=1.0) {

                ans +='1';

                num -=1;

            }

            else    ans +='0';

            bits++;

            if(bits >32)    return "ERROR";

        }

        return ans;

    }

public static void main(String[] args){

        double num =0.1;

        ofot ofpb =new ofot();

        System.out.println(ofpb.printBin(num));

    }

}

你可能感兴趣的:(面试题 05.02. 二进制数转字符串)