Python不使用小数形式添加二进制文件

时间:2014-02-22 23:37:53

标签: python binary

我正在尝试将两个二进制数加在一起而不将数字转换为十进制形式。这很困难,因为你必须添加进位。我错过了什么?

def sameSingleLengthAdd(bin1 , bin2):
    if len(bin1) > len(bin2):
        minus = len(bin1) - len(bin2)
        newBin2
        return addAll(bin1, newBin2)
    elif len(bin2) > len(bin1):
        minus1 = len(bin2)- len(bin1)
        newBin1 = '0'*minus1 + bin1
        return addAll(newBin1, bin2)


def singleAdd(int1, int2):
    addThem = int(int1) + int(int2)
    if addThem == 2:
        return '0'
    else:
        return '1'

def addAll(bin1, bin2):
    if len(bin1)== 0:
        return ''
    else:
        return addAll(bin1[:-1], bin2[-1]) + singleAdd(bin1[-1], bin2[-1])

def sameCarryLengthAdd(bin1 , bin2):
    if len(bin1) > len(bin2):
        minus = len(bin1) - len(bin2)
        newBin2
        return carries(bin1, newBin2)
    elif len(bin2) > len(bin1):
        minus1 = len(bin2)- len(bin1)
        newBin1 = '0'*minus1 + bin1
        return carries(newBin1, bin2)
    else: return carries(bin1, bin2)

def carries(bin1, bin2):
    addThem = int(bin1[-1]) + int(bin2[-1])
    if len(bin1) == 0:
        return ''
    elif addThem == 2:
        return carries(bin1[:-1], bin2[:-1]) + '10'
    else:
        return carries(bin1[:-1], bin2[:-1]) + '0'


def addBinary(bin1, bin2):
    carriedBin = sameCarryLengthAdd(bin1, bin2)
    otherNum = sameSingleLengthAdd(bin1, bin2)
    return sameSingleLengthAdd(carriedBin, otherNum )

1 个答案:

答案 0 :(得分:0)

您的代码在很多方面都会被打破,从错别字到根本不可行的设计。让我们重新设计它,而不是通过并指出你的程序不起作用的所有原因。让我们退一步加入小学。

如果您想添加数字795和224:

  795
 +224
-----
=

您将最后一位数字添加到第一位:

  795
 +224
-----
=   9

并且只要结果不适合单个数字,就可以将一个进位添加到下一个总和:

  1
  795
 +224
-----
=  19

直到你用完了数字才能添加:

 11
  795
 +224
-----
= 019

 11
  795
 +224
-----
=1019

要以二进制形式添加数字,您可以执行相同的操作。从每个数字的末尾开始,对于每个位置,添加每个数字和进位的相应数字。您得到的总和决定了结果的相应数字和用于下一个总和的进位。例如,3表示结果数字为1,下一个位置表示1的进位。如果其中一个数字在另一个数字之前用完了数字,那么你假装它的数字为零。当两个输入都没有数字并且你没有进位时停止。

在伪代码中,此算法将

carry = '0'
result = ''
for position from last to first:
    add carry and digits of each number in the current position
    determine carry and result digit from above sum
    add the new digit to the result