【python】二进制与十进制的转换
相关资料:十进制整数与二进制数的转换文章目录一、十进制转换成二进制1.1 bin函数实现1.2 补充:栈函数实现1.2.1 定义栈1.2.2 转换实现二、二进制转换成十进制三、相关题目一、十进制转换成二进制1.1 bin函数实现# 十进制数:A_10 = 8# 转换成二进制:A_2 = bin(A_10)## print(A_2)返回结果:0b1000# 取数字部分:bin(A_10)[2:]返
相关资料:十进制整数与二进制数的转换
一、十进制转换成二进制
1.1 bin函数实现
# 十进制数:
A_10 = 8
# 转换成二进制:
A_2 = bin(A_10)
## print(A_2)返回结果:0b1000
# 取数字部分:
bin(A_10)[2:]
- 返回结果中的“ob”是二进制的前缀,用来表示之后的数字是二进制。
- 返回类型为字符类型。
1.2 补充:栈函数实现
内容来自课程:数据结构与算法
十进制转换为二进制,采用的是“除以2求余数”的算法。将整数不断除以2,每次得到的余数就是由低到高的二进制位:
(
35
)
10
=
(
100011
)
2
(35)_{10} = (100011)_2
(35)10=(100011)2
得到的余数是从低到高的次序,而输出则是从高到低,所以需要一个栈来反转次序。
1.2.1 定义栈
class Stack:
def __init__(self):
# 创建一个空栈,不包含任何数据项。
self.items = []
def isEmpty(self):
# 返回栈是否为空栈。
return self.items == []
def push(self, item):
# 将item加入栈顶。无返回值。
self.items.append(item)
def pop(self):
# 将栈顶数据项移除,并返回该值。
return self.items.pop()
def peek(self):
# 返回栈顶的数据项但不移除。
return self.items[len(self.items)-1] # 或者 self.items[-1]
def size(self):
# 返回栈中有多少个数据项。
return len(self.items)
1.2.2 转换实现
from pythonds.basic.stack import Stack
def divideBy2(decNumber):
remstack = Stack()
while decNumber > 0:
rem = decNumber % 2 # 求余数
remstack.push(rem)
decNumber = decNumber // 2 # 整数除
binStr = ""
while not remstack.isEmpty():
binStr = binStr + str(remstack.pop())
return binStr
print(divideBy2(35))
二、二进制转换成十进制
# 1. 字符串类型
A_2 = "101"
A_10 = int(A_2, 2)
# 2. 数值类型
A_2 = 0b101
A_10 = int(A_2)
注意:
- 当二进制数是字符串类型的时候,使用int函数时要加上参数2,否则会报错。
- 在写二进制数的时候,一定要加上0b这个前缀,否则会当成十进制数。
- 返回类型为int
三、相关题目
二进制求和
题解:
class Solution:
def binaryAdd(self , A: str, B: str) -> str:
# write code here
c = int(A, 2) + int(B, 2)
return bin(c)[2:]
贴一个在我知道int和bin函数之前写的题解:
class Solution:
def binaryAdd(self , A: str, B: str) -> str:
# write code here
n, m = len(A), len(B)
a, b = 0, 0
for i in range(n):
a += int(A[i]) * 2**(n-i-1)
for j in range(m):
b += int(B[j]) * 2**(m-j-1)
c = a + b
d = []
while c > 0:
d.append(str(c%2))
c = c//2
d.reverse()
return "".join(d)
更多推荐
所有评论(0)