Python: 十进制转二进制的凑数法实现

目录

1、凑数法逻辑:

2、代码实现:

整数部分(部分):

小数部分(部分):


1、凑数法逻辑:

        二进制转十进制是每一位1乘相应的2^(n-1)再累加起来,所以会出现每一项都等于此项前所有项的和的性质,因此十进制转二进制时要先找到不超过目标的最大的项,随后依次往下尝试。

        若加上下一项大于目标,那就跳过下一项;若加上下一项小于目标,那就加上下一项再向下进行(若此时不加上下一项,即使剩下的所有项加起来也一定小于目标)。由于项每次减半,所以会有种二分法的意思。

2、代码实现:

整数部分(部分):

    for k in range (index-1,-1,-1):
        if (sum+binary[k])==desti:              #如果加上下一位刚刚好就得到结果,退出循环
            final.append(k)
            break
        elif (sum+binary[k])>desti:             #如果加上下一位大了,就继续往下一位找
            continue
        elif (sum+binary[k])<desti:             #如果加上下一位小了,也要继续往下一位找
            sum += binary[k]
            final.append(k)
            continue
    desti = 0
    for n in final:
        desti += 10**n                          #final列表里存放的是结果中1的位数
    print("结果是:%d"%desti)

小数部分(部分):

    for k in range(100):
        if (round((sum + binary[k]), 10)) == (round(desti, 10)):    
#十位小数四舍五入,不然可能会有精度问题
            final.append(k)
            break
        elif (sum + binary[k]) > desti:
            continue
        elif (sum + binary[k]) < desti:
            sum += binary[k]
            final.append(k)
            continue
    desti = 0
    for n in final:
        desti += 10 ** (-(n + 1))

3、实现功能截图:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值