计算两个二进制字符串的和
输入: 111 1110
输出: 10101
参与计算的二进制字符串长度可以不同,这样为计算带来麻烦,所以,首先要补齐那个较短的字符串。如果较短字符串长度比长字符串小3,就在较短字符串前面补3个0.
计算的过程,可以模拟手动计算的过程,从右向左逐位计算。反向遍历字符串,相同位上都是1,相加后,这一位就变成了0,而且还要向前进位,下一位的计算要把进位的数值考虑进来,计算右数第一位时,进位设置为0。
def binary_add(str_1, str_2):
# 先补齐
str_1_length = len(str_1)
str_2_length = len(str_2)
if str_1_length < str_2_length:
str_1 = "0"*(str_2_length - str_1_length) + str_1
else:
str_2 = "0"*(str_1_length - str_2_length) + str_2
# 进行计算
index = len(str_1) - 1
pre_num = 0 # 记录进位
res_lst = [] # 记录结果
# 方向遍历
while index >= 0:
item_1 = int(str_1[index])
item_2 = int(str_2[index])
item_sum = item_1 + item_2 + pre_num
pre_num = item_sum // 2
curr_num = item_sum % 2
# 新的计算结果插入到结果的第一位
res_lst.insert(0, str(curr_num))
index -= 1
if pre_num == 1:
res_lst.insert(0, '1')
return ''.join(res_lst)
if __name__ == '__main__':
print(binary_add("111", '1110'))
print(binary_add("11", '1'))
print(binary_add("101", '1001'))
QQ交流群: 211426309