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

题目:

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

解答:

0.625:*2=1.25,把1拿走得到0.1;剩下0.25*2=0.5,没有1,得到0.10;0.5*2=1,拿走1得到0.101。

解释:二进制0.1=10进制0.5;二进制0.01等于10进制0.25;二进制0.001等于10进制0.125。。。。。。

class Solution {
public:
    string printBin(double num) {
        string res="0.";
        int i=0;
        while(i<32 and num>0){
            num=2*num;
            if(num>=1){
                res+='1';
                num-=1;
            }
            else{
                res+='0';
            }
            ++i;
        }
        return num?"ERROR":res;
    }
};

 

posted @ 2020-03-30 13:54  NeoZy  阅读(200)  评论(0编辑  收藏  举报