1.十进制转二进制:
将余数和最后的1从下向上倒序写 就是结果
例如302
302 2 = 151 余0
151 2 = 75 余1
75 2 = 37 余1
37 2 = 18 余1
18 2 = 9 余0
9 2 = 4 余1
4 2 = 2 余0
2 2 = 1 余0
1 2=0 余1
故二进制为100101110
2.二进制转为十进制
先把二进制从高位(最左边的“1”)开始按从上到下的顺序写出 ,第一位就是最后的商 “2 2 = 1 余0 “,余数肯定是加零。其他位数如果有”1“(原来的余数),就先乘以”2“再加”1“。
下面就是从第一位开始乘以2加余数的方法算回去
例如 100101110
1…………0 2+1=1…………余数为1
0…………1 2+0=2………… 余数为0
0 …………2 2+0=4 ………… 余数为0
1 …………4x2+1=9……………… 余数为1
0…………9x2+0=18 ……………… 余数为0
1 …………18 2+1=37 …………余数为1
1…………… 37 2+1=75…………余数为1
1………………75 2+1=151………… 余数为1
0………………151 2+0=302 ………… 余0
所以得到十进制数302
另:128+0*27+026+1*25+024+1*23+122+1*21+0=302(最后一位应为加法)
代码实现
a=‘11’
b= ‘1’
实现 a,b相加为二进制:100,即得出十进制:4.
class Solution(object):
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
# 先转十进制相加,再转成二进制输出。
if a == '0' and b == '0': return '0'
sum_a = 0
sum_b = 0
for x in a:
sum_a =2*sum_a+int(x)
for x in b:
sum_b =2*sum_b+int(x)
sum_tot=sum_a+sum_b
#十进制转二进制,通过每次与2相除判断是否存在余数,存在则减1,直至除至为1结束。
b=0
bin_fin = ''
while sum_tot != 0:
if sum_tot%2==1:
bin_str='1'
sum_tot=(sum_tot-1)/2
bin_fin=bin_fin+bin_str
else:
sum_tot=sum_tot/2
bin_str='0'
bin_fin=bin_fin+bin_str
return bin_fin[::-1]