假设我们正在尝试将10011和1101(或以算术形式为19 x 13)相乘。我们都知道这与将10011自身添加13次相同,反之亦然。显然,我在https://www.w3resource.com/python-exercises/challenges/1/python-challenges-1-exercise-31.php找到了一个代码,该代码提供了一种如何添加两个二进制数的方法。我的问题是,通常来说,如果我们将两个二进制数A和B相乘,我们将如何迭代A使其自身相加B次?显然,为此,我们必须先将B转换为十进制/整数。
def add_binary_nums(x, y):
max_len = max(len(x), len(y))
x = x.zfill(max_len)
y = y.zfill(max_len)
result = ''
carry = 0
for i in range(max_len-1, -1, -1):
r = carry
r += 1 if x[i] == '1' else 0
r += 1 if y[i] == '1' else 0
result = ('1' if r % 2 == 1 else '0') + result
carry = 0 if r < 2 else 1
if carry !=0 : result = '1' + result
return result.zfill(max_len)
print(add_binary_nums('11', '1'))
答案 0 :(得分:1)
您可以通过从0
开始并添加1
直到完成为止来计数。由于您已经定义了二进制add
,因此只需添加循环:
def binary_range(stop: str):
"""Count `stop` times"""
current = '0'
while stop != current:
yield current
current = add_binary_nums(current, '1')
这足以完成“ n次”操作。您现在可以将“ a * b”设置为“向其自身添加b次”:
def binary_mul(a: str, b: str):
"""Multiplay the binary ``a`` by the binary ``b``"""
result = '0'
for _ in binary_range(b):
result = add_binary_nums(result, a)
return result
如果您不关心构建二进制计算器,请使用Python将二进制转换为整数,反之亦然。 int(bin_string, 2)
将字符串"01101"
转换为适当的整数,bin(integer)
将其转换回"0b01101"
。
例如,接受并返回字符串的二进制乘法如下所示:
def binary_mul(a: str, b: str):
return bin(int(a, 2) * int(b, 2))[:2]