我试着把两个二进制数相加,而不把它们转换成十进制形式。这是很困难的,因为你必须加上运载工具。我错过了什么?在
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 )
你的代码在很多方面被破坏了,从打字错误到根本不可行的设计。与其详细说明程序不起作用的每一个原因,不如重新设计它。让我们回到小学加法。在
如果要将数字795和224相加:
从最后一个数字到第一个数字相加:
^{pr2}$如果结果不符合一个位数,则在下一个和上加一个进位:
直到您用完要添加的位数:
要用二进制数相加,也要做同样的事情。从每个数字的末尾开始,为每个位置添加每个数字的相应位数和进位。得到的和决定了结果的相应位数以及下一个和的进位。例如,3表示结果位数为1,下一个位置的进位为1。如果一个数字在另一个数字之前用完了,你就假装它在那里有一个零。当两个输入都没有数字并且没有进位时,就停止。在
在伪代码中,该算法将是
相关问题 更多 >
编程相关推荐