一、题目介绍
二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字不在0和1之间,或者无法精确地用32位以内的二进制表示,则打印“ERROR”。
示例1:
输入:0.625
输出:"0.101"
示例2:
输入:0.1
输出:"ERROR"
提示:0.1无法被二进制准确表示
提示:
32位包括输出中的"0."这两位。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bianry-number-to-string-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、解题思路
本题考查,十进制小数转成二进制小数的,采用“乘2取整”的方法。详见代码。
三、解题代码
class Solution {
public:
string printBin(double num) {
if(num > 1 || num < 0)
return "ERROR";
string res = "0.";
while(num > 0)
{
num *= 2; //小数部分不断乘2
if(num >= 1) //取出整数部分,添加到二进制小数的后边
{
res += "1";
num--; //更新十进制小数
}
else
res += "0";
if(res.size() > 32)
return "ERROR";
}
return res;
}
};