本题要求实现一个函数,将十进制浮点数转换成二进制浮点数(只考虑正数),例如:十进制浮点数0.2转换为二进制浮点数为:0b0.001100110011001100110011001100110011001100110011001101。
转换规则如下:
- 整数部分采用“除2取余,逆向取值”的方法;
- 小数部分则乘2取整,直到余下的小数为0或者满足精度要求为止,然后顺序取值(即最先得到的整数为最高位,最后得到的整数为最低位)。
例如:
所以,最终结果就是:11 1010.101。
函数接口定义:
def dec2bin(dec_num):
其中 dec_num
是用户传入的十进制浮点数,返回对应的二进制浮点数字符串。
裁判测试程序样例:
/* 你的代码将被嵌在这里 */
if __name__ == '__main__':
dec_num = eval(input())
bin_num = dec2bin(dec_num)
print(bin_num)
输入样例:
在这里给出一组输入。例如:
0.1
输出样例:
在这里给出相应的输出。例如:
0b0.0001100110011001100110011001100110011001100110011001101
代码如下:
def dec2bin(dec_num):
# 判断是否是整数如果是则直接用函数转换
if dec_num == int(dec_num):
b = bin(dec_num)
return b
# 如果是浮点数
else:
# 将小数部位提取出来
flo = dec_num - int(dec_num)
# 整数部分照样用函数转换
b = str(bin(int(dec_num)))
tem = flo
floa = ""
# 当tem不为零时则退出循环
while tem != 0:
tem *= 2
floa += str(int(tem))
# 不要忘记减去整数部分
tem -= int(tem)
return b + "." + floa