题目描述
二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。
示例1:
输入:0.625
输出:“0.101”
示例2:
输入:0.1
输出:“ERROR”
提示:0.1无法被二进制准确表示
提示:
32位包括输出中的 “0.” 这两位。
题目保证输入用例的小数位数最多只有 6 位
题目解析
难倒不难,主要是注意以下几点
小数的二进制转换
将实数的十进制表示转换成二进制表示的方法是:每次将实数乘以2,将此时的整数部分添加到二进制表示的末尾,然后将整数部分置为0,重复上述操作,直到小数部分变成0或者小数部分出现循环时结束操作。当小数部分变成 0时,得到二进制表示下的有限小数;当小数部分出现循环时,得到二进制表示下的无限循环小数。
+‘0’和-‘0’
char转int时-‘0’
int转char时+‘0’
代码
class Solution {
public:
string printBin(double num) {
string res="0.";
while(res.size()<=32&&num!=0){
num*=2;
int digit=num;
res+=(digit+'0');
num-=digit;
}
return res.size()>32?"ERROR":res;
}
};