我想做一个二进制计算器,但减法部分有问题。这是我的代码(我尝试根据我在该网站上找到的代码进行改编)。
maxlen = max(len(s1), len(s2))
s1 = s1.zfill(maxlen)
s2 = s2.zfill(maxlen)
result = ''
carry = 0
i = maxlen - 1
while(i >= 0):
s = int(s1[i]) - int(s2[i])
if s <= 0:
if carry == 0 and s != 0:
carry = 1
result = result + "1"
else:
result = result + "0"
else:
if carry == 1:
result = result + "0"
carry = 0
else:
result = result + "1"
i = i - 1
if carry>0:
result = result + "1"
return result[::-1]
该程序对于某些二进制减法工作正常,但对于其他二进制减法则失败。
有人可以帮助我,因为我找不到错误吗?多谢。
简短回答:对于以下情况,您的代码是错误的s1[i] == s2[i]
and carry == 1
.
更长的答案:您应该重组您的代码以具有三种不同的情况s==-1
, s==0
, and s==1
,然后根据值进行分支carry
在每种情况下:
if s == -1: # 0-1
if carry == 0:
...
else:
...
elif s == 0: # 1-1 or 0-0
if carry == 0:
...
else:
...
else: # 1-0
if carry == 0:
...
else:
...
这样,您就可以为每种可能性分配一个单独的块,因此不会像您第一次尝试时那样忽略某个案例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)