二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字不在0和1之间,或者无法精确地用32位以内的二进制表示,则打印“ERROR”。
示例1:
输入:0.625 输出:"0.101"
示例2:
输入:0.1 输出:"ERROR" 提示:0.1无法被二进制准确表示
提示:
- 32位包括输出中的"0."这两位。
方法一:十进制小数转二进制小数
十进制小数转二进制小数的方法是:小数部分乘以
我们不妨举个例子,比如说我们要将
所以十进制小数
对于本题,由于实数介于
最后,如果小数部分不为 "ERROR"
,否则返回转换后的二进制小数。
时间复杂度
class Solution:
def printBin(self, num: float) -> str:
ans = '0.'
while len(ans) < 32 and num:
num *= 2
x = int(num)
ans += str(x)
num -= x
return 'ERROR' if num else ans
class Solution {
public String printBin(double num) {
StringBuilder ans = new StringBuilder("0.");
while (ans.length() < 32 && num != 0) {
num *= 2;
int x = (int) num;
ans.append(x);
num -= x;
}
return num != 0 ? "ERROR" : ans.toString();
}
}
class Solution {
public:
string printBin(double num) {
string ans = "0.";
while (ans.size() < 32 && num != 0) {
num *= 2;
int x = (int) num;
ans.push_back('0' + x);
num -= x;
}
return num != 0 ? "ERROR" : ans;
}
};
func printBin(num float64) string {
ans := &strings.Builder{}
ans.WriteString("0.")
for ans.Len() < 32 && num != 0 {
num *= 2
x := byte(num)
ans.WriteByte('0' + x)
num -= float64(x)
}
if num != 0 {
return "ERROR"
}
return ans.String()
}