‘’’
计算两个二进制字符串的和
输入 : 111 1110
输出 : 10101
参与计算的二进制字符串长度可以不同,这样为计算带来麻烦,所以,
首先要补齐那个较短的 字符串。如果较短字符串长度比长字符串小3,就在较短字符串前面补3个0.
计算的过程,可以模拟手动计算的过程,从右向左逐位计算。反向遍历字符串,相同位上都是
1,相加后,这—位就变成了0,而且还要向前进位,下—位的计算要把进位的数值考虑进来,
计算右数第—位时,进位设置为0。
‘’’
def add_binary(a, b):
# 补齐长度
# if len(a)<len(b):
# a='0'*(len(b)-len(a))+str(a)
# elif len(b)<len(a):
# b='0'*(len(a)-len(b))+str(b)
# 更简单的一种方法
a_str = a.zfill(len(a))
b_str = b.zfill(len(a))
# 进位
carry = 0
result = []
# 同时遍历两个字符串,直到至少有一个字符串为空
i = len(a_str) - 1
while i>=0:
# 当前位+进位
sum_val = int(a_str[i]) + int(b_str[i]) + carry
carry = sum_val // 2
current = sum_val % 2 # 当前位
#保存数据
result.insert(0,current)
i-=1
# 处理最后一位
# 如果最后还有进位,需要添加到结果中
if carry:
result.insert(0, carry)
return ''.join(map(str,result))
if __name__ == '__main__':
a = '11'
b = '10'
print(add_binary(a,b))
标签:__,python,求和,carry,二进制,result,计算,字符串,进位
From: https://blog.csdn.net/qingcheng_123456/article/details/137194776