使用进位的二进制加法

2024-05-19 00:05:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在不将S和T这两个数字转换成以10为基数的情况下添加两个二进制数,我很难将进位合并到代码中。另外,如果一个二进制数比另一个长,我也不知道该怎么办。在

def addB(S,T):
  '''adds binary number without converting to base 10'''
  def addBhelper(S,T,carry):
    if S=='' and T=='':
        return ''
    if S[-1] + T[-1]+carry==0:
        return addBhelper(S[:-1],T[:-1],0) + str((carry+int(S[-1]) + int(T[-1]))% 2)
    if S[-1] + T[-1]+carry==1:
        return addBhelper(S[:-1],T[:-1],1) + str((carry+int(S[-1]) + int(T[-1])) % 2)
    if S[-1] + T[-1]+carry==2:
        return addBhelper(S[:-1],T[:-1],2) + str((carry+int(S[-1]) + int(T[-1])) % 2)
    if S[-1] + T[-1]+carry==3:
        return addBhelper(S[:-1],T[:-1],2) + str((carry+int(S[-1]) + int(T[-1])) % 2)
  return addBhelper(S,T,0)

----已更新以修复代码格式


Tags: 代码returnifdef二进制情况数字int
2条回答

让我们从第一部分开始,确保两个字符串的长度相同。因为它们是数字,你只需要'0'填充较短的数字

max_len = max(len(S), len(T))
# the more simple to understand way
while len(S) < max_len: S = '0' + S
while len(T) < max_len: T = '0' + T
# or you can use this python trickery
S = ('0' * (max_len - len(S))) + S
T = ('0' * (max_len - len(T))) + T

对于运载工具,您的运载工具应如下所示:

^{pr2}$

希望有帮助

下面是一个更简洁的版本,它使用了一些Python语法:

def add(a,b,c=0):
    if a == '' and b == '':
        return str(c)
    a = a or '0'
    b = b or '0'
    n = int(a[-1]) + int(b[-1]) + c
    return add(a[:-1],b[:-1],n//2) + str(n%2)
  • 使用carryc=0的默认值来删除内部函数
  • a = a or '0'a设置为'0',如果它是{}
  • 在添加字符串之前,您忘了将字符串转换为整数
  • n//2拿到手

相关问题 更多 >

    热门问题