【发布时间】:2014-02-22 23:37:52
【问题描述】:
我正在尝试将两个二进制数相加而不将数字转换为十进制形式。这很困难,因为您还必须添加进位。我错过了什么?
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 )
【问题讨论】:
-
"不将数字转换为十进制形式" - Python 不会将数字转换为十进制来添加它们。事实上,当你给它十进制时,它必须将它转换为二进制才能使用它。
-
“我错过了什么?” - 好吧,我不知道。怎么了?运行此程序时实际发生了什么,它与您的预期有何不同?
-
我得到一个用于进位的字符串索引错误(bin1[:-1] , bin2[:-1])
-
我想如果你回去阅读你写的东西,你可能会发现很多错误。例如,第 4 行,
newBin2。那应该做什么?您是否在中途因该功能分心而忘记完成编写?