05.02. Binary Number to String
Description
Given a real number between O and 1 (e.g., 0.72) that is passed in as a double, print the binary representation. If the number cannot be represented accurately in binary with at most 32 characters, print "ERROR".
Example1:
Input: 0.625 Output: "0.101"
Example2:
Input: 0.1 Output: "ERROR" Note: 0.1 cannot be represented accurately in binary.
Note:
- This two characters "0." should be counted into 32 characters.
Solutions
Solution 1: Decimal Fraction to Binary Fraction
The method of converting a decimal fraction to a binary fraction is as follows: multiply the decimal part by \(2\), take the integer part as the next digit of the binary fraction, and take the decimal part as the multiplicand for the next multiplication, until the decimal part is \(0\) or the length of the binary fraction exceeds \(32\) bits.
Let's take an example, suppose we want to convert \(0.8125\) to a binary fraction, the process is as follows:
So the binary fraction representation of the decimal fraction \(0.8125\) is \(0.1101_{(2)}\).
For this problem, since the real number is between \(0\) and \(1\), its integer part must be \(0\). We only need to convert the decimal part into a binary fraction according to the above method. Stop the conversion when the decimal part is \(0\) or the length of the binary fraction is not less than \(32\) bits.
Finally, if the decimal part is not \(0\), it means that the real number cannot be represented in binary within \(32\) bits, return the string "ERROR"
. Otherwise, return the converted binary fraction.
The time complexity is \(O(C)\), and the space complexity is \(O(C)\). Here, \(C\) is the length of the binary fraction, with a maximum of \(32\).
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|