二进制十进制互换代码实现

1.十进制转二进制:

将余数和最后的1从下向上倒序写 就是结果
例如302
302 2 = 151 余0
151 2 = 75 余1
75 2 = 37 余1
37 2 = 18 余1
18 2 = 9 余0
9 2 = 4 余1
4 2 = 2 余0
2 2 = 1 余0
1 2=0 余1
故二进制为100101110

2.二进制转为十进制

先把二进制从高位(最左边的“1”)开始按从上到下的顺序写出 ,第一位就是最后的商 “2 2 = 1 余0 “,余数肯定是加零。其他位数如果有”1“(原来的余数),就先乘以”2“再加”1“。

下面就是从第一位开始乘以2加余数的方法算回去
例如 100101110
1…………0 2+1=1…………余数为1
0…………1 2+0=2………… 余数为0
0 …………2 2+0=4 ………… 余数为0
1 …………4x2+1=9……………… 余数为1
0…………9x2+0=18 ……………… 余数为0
1 …………18 2+1=37 …………余数为1
1…………… 37 2+1=75…………余数为1
1………………75 2+1=151………… 余数为1
0………………151 2+0=302 ………… 余0
所以得到十进制数302
另:128+0*27+026+1*25+024+1*23+122+1*21+0=302(最后一位应为加法)

代码实现

a=‘11’
b= ‘1’
实现 a,b相加为二进制:100,即得出十进制:4.

class Solution(object):
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        # 先转十进制相加,再转成二进制输出。
        if a == '0' and b == '0': return '0'
        sum_a = 0
        sum_b = 0
        for x in a:
            sum_a =2*sum_a+int(x)
        for x in b:
            sum_b =2*sum_b+int(x)
        sum_tot=sum_a+sum_b
        #十进制转二进制,通过每次与2相除判断是否存在余数,存在则减1,直至除至为1结束。
        b=0
        bin_fin = ''
        while sum_tot != 0:
            if sum_tot%2==1:
                bin_str='1'
                sum_tot=(sum_tot-1)/2
                bin_fin=bin_fin+bin_str
            else:
                sum_tot=sum_tot/2 
                bin_str='0'
                bin_fin=bin_fin+bin_str
        return bin_fin[::-1]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值