class Solution {
public:
string printBin(double num) {
}
};
面试题 05.02. 二进制数转字符串
二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。
示例1:
输入:0.625 输出:"0.101"
示例2:
输入:0.1 输出:"ERROR" 提示:0.1无法被二进制准确表示
提示:
"0."
这两位。6
位原站题解
cpp 解法, 执行用时: 0 ms, 内存消耗: 6 MB, 提交时间: 2022-11-18 10:47:06
class Solution { public: string printBin(double num) { string ans = "0."; while (num != 0) { num *= 2; if (num >= 1) { //乘2后num>=1,说明此时整数部分为1,取完该整数部分1后,num接着利用的还是其小数部分,所以要减掉整数部分(即1) ans += "1"; num -= 1; } else { //小于1说明整数部分为0,取该整数部分0 ans += "0"; } if (ans.size() > 32) return "ERROR"; } return ans; } };
java 解法, 执行用时: 0 ms, 内存消耗: 38.6 MB, 提交时间: 2022-11-18 10:46:21
class Solution { public String printBin(double num) { String ans = "0."; while (num != 0) { num *= 2; if (num >= 1) { //乘2后num>=1,说明此时整数部分为1,取完该整数部分1后,num接着利用的还是其小数部分,所以要减掉整数部分(即1) ans += "1"; num -= 1; } else { //小于1说明整数部分为0,取该整数部分0 ans += "0"; } if (ans.length() > 32) return "ERROR"; } return ans; } }
golang 解法, 执行用时: 0 ms, 内存消耗: 1.8 MB, 提交时间: 2022-11-18 10:40:21
func printBin(num float64) string { a, k, s := 0.5, 1, 0.0 t := "0." for s != num { if num - s >= a { t += "1" s += a } else { t += "0" } k++ a *= 0.5 if k > 30 { return "ERROR" } } return t }
python3 解法, 执行用时: 44 ms, 内存消耗: 15 MB, 提交时间: 2022-11-18 10:36:51
class Solution: def printBin(self, num: float) -> str: a = 0.5 k = 1 s = 0.0 t = '0.' while s != num: if num - s >= a: s = s + a t += '1' else: t += '0' k += 1 a = 0.5 ** k if k > 30: return "ERROR" return t