Python实现十进制和二进制、八进制、十六进制的相互转换

Python实现十进制和二进制、八进制、十六进制的相互转换

1. 前言

此文方便后期的复习,如果有问题,欢迎批评指正。

2. 实现思想

2.1 十进制转换为其他进制

原理:除以进制数(base)取余,逆序输出。
举例:将16转换为2进制形式

  1. 16除以2取余,得到余数0,存入结果(这个是最低位,
  2. 将16//2 得到8
  3. 不断重复1和2,直到n <= 0
    以下分别用内置函数bin(),不用内置函数、借用栈等方法进行了实现。
    代码实现
def my_bin(n):
    """ 十进制转二进制, 调用内置函数"""
    return bin(n)

def my_bin2(n):
    """十进制转二进制, 原理:除2取余,逆序排列输出"""
    ans = list()
    while n > 0:
        res = n % 2
        ans.append(str(res)) # 要转为字符串,便于后面join()方法
        n //= 2
    ans.reverse()
    ans = ''.join(ans)
    return ans

def base_convert(n, base):
    """通用十进制转为二进制、八进制、十六进制等"""
    digit = '0123456789ABCEFG'
    ans = list()
    while n > 0:
        res = n % base
        ans.append(digit[res]) # 也可以构造字典进行取数
        n //= base
    ans.reverse() # 内置方法反转,或者用切片 ans = ans[::-1]
    ans = ''.join(ans)
    return ans

class Stack:
    """Python实现一个栈"""
    def __init__(self):
        """初始化一个列表"""
        self.items = []

    def is_empty(self):
        """栈是否为空"""
        return self.items == []

    def push(self, n):
        """入栈"""
        self.items.append(n)

    def pop(self):
        """出栈"""
        return self.items.pop()

    def peek(self):
        """取出最后一个数"""
        return self.items[len(self.ites)-1]

    def size(self):
        """栈中元素多少"""
        return len(self.items)


def base_converter3(n, base):
    """利用栈,将十进制转换为其他进制"""
    digits = '0123456789ABCDEF'
    s = Stack()
    ans = ''
    while n > 0:
        rem = n % base
        s.push(rem)
        n //= base
    while not s.is_empty():
        ans += digits[s.pop()]
    return ans

if __name__ == '__main__':
    n, base = tuple(map(int, input().strip().split()))
    print(my_bin(n))
    print(my_bin2(n))
    n = int(input())
    base = int(input())
    print(base_converter3(n, base))

2.2 其他进制转换为十进制

原理:遍历进制的每一位,同时乘以相应的进制位数,累计求和
代码实现:

def base_convert2(s, base):
    """二进制、八进制、十六进制转十进制。原理:每一位乘以相应base的次方,累计求和"""
    s = s[::-1] # 字符串反转
    ans = 0
    j = 0
    for i in s:
        ans += int(i) * base ** j
        j += 1
    return ans

3. 参考资料

  1. Python——简单实现十进制对十六、八、二进制的转换
  2. 二进制和十进制的转换
发布了128 篇原创文章 · 获赞 157 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/qq_27283619/article/details/101317744