Python不使用十进制形式的二进制加法

2024-07-01 07:52:01 发布

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

我试着把两个二进制数相加,而不把它们转换成十进制形式。这是很困难的,因为你必须加上运载工具。我错过了什么?在

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 )

Tags: lenreturnifdefelseintbin2bin1
1条回答
网友
1楼 · 发布于 2024-07-01 07:52:01

你的代码在很多方面被破坏了,从打字错误到根本不可行的设计。与其详细说明程序不起作用的每一个原因,不如重新设计它。让我们回到小学加法。在

如果要将数字795和224相加:

  795
 +224
  -
=

从最后一个数字到第一个数字相加:

^{pr2}$

如果结果不符合一个位数,则在下一个和上加一个进位:

  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

相关问题 更多 >

    热门问题