进制转换(Python)

本文详细介绍了如何使用Python编程语言将10进制数转换为任意进制数的方法,包括取余和整除操作,并提供了两个函数`TentoB`和`Btoten`以及一个处理两个N进制数相加的完整函数。
摘要由CSDN通过智能技术生成

一、把10进制数转换成N进制数

将10进制数转换为N进制数通常遵循以下步骤:

  1. 将10进制数除以N,记录下商和余数。
  2. 将商作为新的被除数重复步骤1,直到商为0。
  3. 将得到的余数逆序排列,这就是所求的N进制数。

假设我们要将10进制数29转换为N=3(三进制)数。

步骤如下:

  • 29÷3=9         余数 2 
  • 9÷3=3           余数 0
  • 3÷3=1           余数 0
  • 1÷3=0            余数 1

现在,我们将余数逆序排列得到三进制数:(1002)3(1002)3​

所以,10进制数29对应的三进制数是1002

 那么我们该如何编写代码呢?

我们可以通过%来取余,//来取整,这样我们编写以下代码:

# 定义一个函数,将十进制数转换为任意进制数
def TentoB(ten, b):
    # 创建一个空列表,用于存储转换后的每一位数字
    B = []
    # 创建一个空字符串,用于存储最终的结果
    s = ''
    # 使用while循环,当ten大于0时,执行以下操作
    while ten > 0:
        # 计算ten除以b的余数,将其转换为字符串并添加到列表B中
        B.append(str(ten % b))
        # 更新ten的值,将其除以n并向下取整
        ten = ten // b
    # 使用for循环遍历列表N的逆序,对于每个元素i
    for i in B[::-1]:
        # 如果i小于10,将其转换为字符串并添加到字符串s中
        if int(i) < 10:
            s += i
        # 否则,将i加上55(ASCII码中大写字母A的值),然后将其转换为字符并添加到字符串s中
        else:
            s += chr(int(i) + 55)
    # 返回字符串s作为结果
    return s

二、把10进制转换成N进制

将10进制数转换为N进制数,需要通过不断除以N并取余数的方式进行。

假设我们要将10进制数D转换为N进制数:

1. 首先,我们将D除以N,得到商q_1和余数r_1。余数r_1将是N进制表示中最右边的数字(即个位)。
2. 然后,我们取上一步的商q_1,再次除以N,得到新的商q_2和余数r_2。余数r_2将是N进制表示中次右边的数字(即十位)。
3. 重复这个过程,直到商为0为止。最后一个非零余数将是N进制表示中最左边的数字(即最高位)。
4. 将所有的余数从最后一个非零余数开始顺序排列,得到的就是D的N进制表示。

用数学公式表示这个过程:

D=q1​⋅N+r1

​q1​=q2​⋅N+r2​

q2​=q3​⋅N+r3

⋮​

qn−1​=0⋅N+rn

其中,r_1,r2,...,rn是N进制数的各个位的数字,且0≤ r_i < N。

最终答案是将r_n, r_{n-1}, ..., r_2, r_1按顺序排列得到的数。

 

def Btoten(B, b):
    """
    将给定的进制数B转换为十进制数。
    
    参数:
    B (str): 一个表示进制数的字符串,其中每个字符都是一个数字或字母。
    b (int): 进制数的基数,例如二进制为2,八进制为8,十六进制为16等。
    
    返回:
    int: 转换后的十进制数。
    """
    ten = 0
    count = len(B) - 1
    for i in B:
        ten += (dic[i] * b ** count)
        count -= 1
    return ten

但是,我们得先把 0~Z 对应的数值存下来,这样拥有键值对dict更适合。

dic = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, 'A': 10, 'B': 11, 'C': 12,
       'D': 13, 'E': 14, 'F': 15, 'G': 16, 'H': 17, 'I': 18, 'J': 19, 'K': 20, 'L': 21, 'M': 22, 'N': 23, 'O': 24,
       'P': 25, 'Q': 26, 'R': 27, 'S': 28, 'T': 29, 'U': 30, 'V': 31, 'W': 32, 'X': 33, 'Y': 34, 'Z': 35}

三、完整函数

输入格式

数据数据共三行。

第一行,一个十进制的整数,表示进制 B;

第二行和第三行,每行一个 B 进制数正整数。数字的每一位属于 {0,1,2,3,4,5,6,7,8,9,A,B⋯ }{0,1,2,3,4,5,6,7,8,9,A,B⋯}。

输出格式

一个 B 进制数,表示输入的两个数的和。

 def  Btoten(B,b):
    ten = 0
    count = len(B)-1
    for i in B:
        ten += (dic[i]*b**count)
        count -= 1
    return ten


def Tentob(ten,b):
    B =[]
    s = ''
    while ten > 0:
        B.append(str(ten%b))
        ten = ten//b
    for i in B[::-1]:
        if int(i) < 10:
            s += i
        else:
            s += chr(int(i)+55)
    return s



dic = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, 'A': 10, 'B': 11, 'C': 12,'D': 13, 'E': 14, 'F': 15, 'G': 16, 'H': 17, 'I': 18, 'J': 19, 'K': 20, 'L': 21, 'M': 22, 'N': 23, 'O': 24,'P': 25, 'Q': 26, 'R': 27, 'S': 28, 'T': 29, 'U': 30, 'V': 31, 'W': 32, 'X': 33, 'Y': 34, 'Z': 35}
b = int(input())
num1 = input().strip()
num2 = input().strip()
num1 = Btoten(num1,b)
num2 = Btoten(num2,b)
result = Tentob(num1+num2,b)
print(result)

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

溢彩风华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值