Binary to String:给定一个[0, 1]
之间的实数,用string
返回其二进制表示,如果二进制表示长于32
个字符,则返回ERROR
。
根据十进制转二进制的规则,对小数部分不断乘2
减1
即可。
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.5
、0.25
、0.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;
}
};