题目描述
有一个介于0和1之间的实数,类型为double,返回它的二进制表示。如果该数字无法精确地用32位以内的二进制表示,返回“Error”。
给定一个double num,表示0到1的实数,请返回一个string,代表该数的二进制表示或者“Error”。
测试样例:
0.625
返回:0.101
分析:将小数转化为二进制的方法:将小数乘以2顺序存储结果的整数部分,并继续将小数部分乘以2.....依次操作 知道达到所需的精度或结果为零
class BinDecimal {
public:
string printBin(double num) {
/* string str = {\'0\',\'.\'};
string sError ={"Error"};
int i;
for(i = 0; i < 32; i++) {
int a = (int)(num * 2);
if (num * 2 - a != 0)
if (a == 1)
str[i+2] = \'1\';
else
str[i] = \'0\';
else
break;
}
if (i < 32)
return str;
else
return sError;
*/
string str = "0.";
while(num > 0) {
if(str.size() >= 32)
return "Error";
num *= 2;
if(num >= 1) {
str += \'1\';
num -= 1;
}
else
str +=\'0\';
}
return str;
}
};