实现二进制数到十进制的转换#

这篇博客介绍了如何实现将二进制数(包括整数和小数)转换为十进制的算法。文章通过提供三种不同的代码实现方式,详细解释了处理包含小数点的二进制数的关键步骤,包括字符串反转、位权计算和结果求和。这些算法避免了使用Python内置的进制转换函数,适合初学者理解和练习。
摘要由CSDN通过智能技术生成

相关知识


  字符串中字符的编号和二进制的数位是不一样的,但两者之间有对应关系,找出这种对应关系是解决该问题的关键。
  参数b可能包含小数点,也可能不包含小数点,可以在函数体开始时进行判断,若b不包含小数点,则在b的最后添加一个小数点,从而后面可以统一处理。
  本关可能会用到字符串的相关操作,可以参考“除二取余”实训第 1 关。

编程要求


  在 Begin-End 区间实现BinToDec(b)函数,其功能是将二进制数b转换为十进制,说明如下:
  1)b是一个用字符串表示的二进制数;
  2)在测试集中,b均为正数(如果你的程序还能处理其它情况则更好);
  3)b可能包含小数点(表示二进制小数,如110101.111),也可能不包含小数点(表示二进制整数,如11010);
  4)不准使用 Python 提供的进制转换函数。



########## Begin ##########
def BinToDec(b):
    b=str(b)
    l=[]
    if '.'not in b:
        b=b[::-1]
        for i in range(len(b)):
            l.append(int(b[i])*2**i)
        return sum(l)
    else:
        location=b.index('.')
        b1=b[:location]
        b1=b1[::-1]
        b2=b[location+1:]
    for i in range(len(b1)):
        l.append(int(b1[i])*2**i)
    for i in range(len(b2)):
        l.append(int(b2[i])*2**(-1-i))
    return sum(l)
########## End ##########
b = input()
d = BinToDec(b)
print('%s -> %s' % (b, d))

########## Begin ##########

def BinToDec(b):

    b=str(b)        #将b转换为字符

    l=[]        #创建一个空列表

    if '.'not in b:        #如果为整数

        b=b[::-1]        #将b中的顺序颠倒

        for i in range(len(b)):        #从字符串i

            l.append(int(b[i])*2**i)        #字符串b中,第i个字符乘以2的i次方

        return sum(l)

    else:        #浮点,有小数点的情况

        location=b.index('.')         #定位小数点的位置

        b1=b[:location]        #小数点前的数,即整数

        b1=b1[::-1]        #将b1字符串中字符的顺序颠倒,向后转

        b2=b[location+1:]         #b2为小数点后面一位

    for i in range(len(b1)):

        l.append(int(b1[i])*2**i)         #计算整数部分

    for i in range(len(b2)):

        l.append(int(b2[i])*2**(-1-i))        #计算小数点后面的部分

    return sum(l)        #将两部分相加,拼接

########## End ##########

b = input()

d = BinToDec(b)

print('%s -> %s' % (b, d))


########## Begin ##########  
def BinToDec(b):  
    if '.' not in b:        #若b不包含小数点  
        b = b+'.'           #则在最后添加小数点  
    n = b.index('.')        #小数点的编号,即整数部分的总位数  
    b = b.replace('.','')   #删除小数点,方便后面的运算
    d = 0  
    for i in range(len(b)): #对于二进制每一位  
        if b[i]=='1':       #若这一位为1,则将对应的位权累加到d  
            d=d+2**(n-1-i)  #字符串第i号字符对应二进制的第n-1-i位  
    return d  
########## End ##########  
b = input()  
d = BinToDec(b)  
print('%s -> %s' % (b, d))

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

省心省事省时

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值