美文网首页
python 二进制求和(lintcode)

python 二进制求和(lintcode)

作者: 仁暮 | 来源:发表于2017-09-07 22:22 被阅读0次

    描述:

    二进制求和
    原题地址:http://www.lintcode.com/submission/10872869/
    给定两个二进制字符串,返回他们的和(用二进制表示)。


    样例:

    a = 11,b = 1,返回 100
    a = 0, b = 0, 返回 0


    思路:

    先将二进制转换为十进制进行相加,再将计算后的十进制重新转换为二进制


    代码:

    class Solution:
    """
    @param: a: a number
    @param: b: a number
    @return: the result
    """
    
    def addBinary(self, a, b):
    # write your code here
    # 转换为十进制后相加
    import math
    i = 0
    sum_a = 0 # 保存二进制a转换为十进制后的值
    sum_b = 0
    a = int(a) # 因为输入的是二进制字符串
    b = int(b)
    while a:
        dec = a % 2 # 取出最后一个数字
        sum_a += dec * pow(2, i) # 将每一位二进制数与其位权相乘,然后相加就得到了十进制数
        a = a // 10  # 是两数相除,留下整数部分,除去最后一位
        i += 1
    
    i = 0
    while b:
        dec = b % 2
        sum_b += dec * pow(2, i)
        b = b // 10
        i += 1
    sum = sum_a + sum_b 
    # 利用辗转相除法将十进制数转化为二进制
    temp = []
    result = ''
    # 把十进制转化为二进制后存入数组temp
    while sum:
        dec = sum % 2
        sum = sum // 2
        temp.append(dec)
    # 因为是辗转相除法,所以顺序要相反
    while temp:
        result += str(temp.pop())
    
    result = int(result)
    return result
    

    学习:

    了解十进制与二进制的互相转化

    temp.pop() # 移除列表最后一位并将其返回

    相关文章

      网友评论

          本文标题:python 二进制求和(lintcode)

          本文链接:https://www.haomeiwen.com/subject/axuwjxtx.html