​相关资料:十进制整数与二进制数的转换

一、十进制转换成二进制

1.1 bin函数实现

# 十进制数:
A_10 = 8

# 转换成二进制:
A_2 = bin(A_10)
## print(A_2)返回结果:0b1000

# 取数字部分:
bin(A_10)[2:]
  1. 返回结果中的“ob”是二进制的前缀,用来表示之后的数字是二进制。
  2. 返回类型为字符类型。

1.2 补充:栈函数实现

内容来自课程:数据结构与算法

十进制转换为二进制,采用的是“除以2求余数”的算法。将整数不断除以2,每次得到的余数就是由低到高的二进制位:
image-20220206020432846
( 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))

二、二进制转换成十进制

image-20220206015546573

# 1. 字符串类型
A_2 = "101"
A_10 = int(A_2, 2)
# 2. 数值类型
A_2 = 0b101
A_10 = int(A_2)

注意:

  1. 当二进制数是字符串类型的时候,使用int函数时要加上参数2,否则会报错。
  2. 在写二进制数的时候,一定要加上0b这个前缀,否则会当成十进制数。
  3. 返回类型为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)
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐