python程序给定一个介于 0 和 1 之间的实数,(如 0.625 ), 类型为 double ,打印它的二进制表示( 0.101,因为小数点后的二进制分别表示 2^{-1} = 0.52−1=0.5 ,2^{-2} = 0.252−2=0.25 , 2^{-3} = 0.1252−3=0.125 ......)。 再比如:0.875 运算后的结果为 0.111。 如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。
时间: 2024-02-13 15:04:16 浏览: 178
可以将输入的实数乘以2,判断乘积是否大于1,如果大于1,则表示该实数的二进制表示的整数部分为1,否则为0,然后将乘积减去整数部分,继续乘以2,重复上述步骤,直到小数部分为0,或者二进制表示超过32位时停止。
具体实现代码如下:
```python
def print_binary(num):
if num >= 1 or num <= 0:
return "ERROR"
binary = ["0", "."]
fraction = 0.5
while num > 0:
if len(binary) > 32:
return "ERROR"
if num >= fraction:
binary.append("1")
num -= fraction
else:
binary.append("0")
fraction /= 2
return "".join(binary)
```
其中,`binary`列表用于存储二进制表示,初始值为['0', '.'],表示整数部分为0,小数部分为'.'。`fraction`表示当前位的权值,初始值为0.5,表示小数点后第一位的权值为1/2。在循环中,如果num大于等于fraction,则表示该位的值为1,否则为0,将相应的值添加到`binary`中,并将num减去该位的权值。然后将`fraction`除以2,表示计算下一位的权值。最终将`binary`中的元素合并成一个字符串并返回。
例如,对于输入的实数0.625,其二进制表示的整数部分为0,小数部分为0.625,小数点后第一位的权值为1/2,因此第一位为1,减去1/2后,剩余的小数部分为0.125,小数点后第二位的权值为1/4,因此第二位为0,剩余的小数部分为0.125,小数点后第三位的权值为1/8,因此第三位为1,减去1/8后,剩余的小数部分为0.0625,小数点后第四位的权值为1/16,因此第四位为0,以此类推,直到小数部分为0。因此,函数返回的字符串为'0.101'。
阅读全文