67.二进制求和
-
方法一
- 将a和b两个字符串分别转化为十进制(这里使用a[-i],使其倒序遍历,pow()函数则是求得2的i-1次方),然后相加,把结果存储在x中;m,n=divmod(x,2)函数是m=x/2,n=x%2,然后把余数n倒着串起来,即所要的结果。
class Solution: def addBinary(self, a: str, b: str) -> str: if a=='0' and b=='0': return '0' else: x=0 for i in range(1,len(a)+1): x+=int(a[-i])*pow(2,i-1) for i in range(1,len(b)+1): x+=int(b[-i])*pow(2,i-1) y='' while x>0: x,z=divmod(x,2) y=str(z)+y return y`
-
方法二:
-
借鉴了别人的方法然后再pycharm上进行了调试输出,代码如下:
```python
a:str = input("输入a:")
b:str = input("输入b:")
if len(a)<len(b):
a,b=b,a
a=list(a)
for i in range(-1,-len(b)-1,-1):
if b[i]=='1':
if a[i]=='1':
k=i
while(a[k])=='1':
a[k]='0'
k-=1
if k== -len(a)-1:
a.insert(0,'0')
break
a[k]='1'
else:
a[i]='1'
print(''.join(a))
这里认为a比b长,将a 转化为列表,对b从右向左遍历,如果b[i]的值不是1,就不需要进位,如果是1 ,则考虑进位问题,其中还有一个由进位产生多出一位的情况,则在最前面插入一个‘0’