二进制加法使用进位

时间:2016-10-26 23:30:54

标签: python binary addition

我试图添加两个二进制数而不将两个数字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)

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

2 个答案:

答案 0 :(得分:1)

这是一个使用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)
  • 使用carry c=0的默认值来摆脱内部功能
  • a = a or '0'a设置为'0' ''
  • 您在添加字符串之前忘记将字符串转换为整数
  • n//2获取进位

答案 1 :(得分:0)

让我们从第一部分开始,确保两个字符串的长度相同。因为它们是数字,所以你要做的就是'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

对于携带者,您的携带应如下:

For sum = 0, carry = 0
For sum = 1, carry = 0
For sum = 2, carry = 1
For sum = 3, carry = 1

希望有所帮助,