我正在尝试将两个二进制数加在一起而不将数字转换为十进制形式。这很困难,因为你必须添加进位。我错过了什么?
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 )
答案 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