程序员面试金典 5.2

Binary to String:给定一个[0, 1]之间的实数,用string返回其二进制表示,如果二进制表示长于32个字符,则返回ERROR

根据十进制转二进制的规则,对小数部分不断乘21即可。

class Solution {
private:
    const string strErr = "ERROR";
public:
    string printBin(double num) {
        if(num > 1.0 || num < 0.0){
            return strErr;
        }
        string strRet = "0.";
        while(num > 0.0){
            if(strRet.size() >= 34) return strErr;
            double r = num * 2;
            if(r >= 1.0){
                strRet.push_back('1');
                num = r - 1.0;
            }
            else{
                strRet.push_back('0');
                num = r;
            }
        }
        return strRet;
    }
};

也可以通过和0.50.250.125等比较大小来确定每一位的二进制表示。

class Solution {
private:
    const string strErr = "ERROR";
public:
    string printBin(double num) {
        if(num > 1.0 || num < 0.0){
            return strErr;
        }
        double fraction = 0.5;
        string strRet = "0.";
        while(num > 0.0){
            if(strRet.size() >= 34) return strErr;
            if(num >= fraction){
                strRet.push_back('1');
                num -= fraction;
            }
            else{
                strRet.push_back('0');
            }
            fraction /= 2.0;
        }
        return strRet;
    }
};
发布了194 篇原创文章 · 获赞 2 · 访问量 7727

猜你喜欢

转载自blog.csdn.net/RayoNicks/article/details/105382290