描述:
二进制求和
原题地址: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() # 移除列表最后一位并将其返回
网友评论