一、把10进制数转换成N进制数
将10进制数转换为N进制数通常遵循以下步骤:
- 将10进制数除以N,记录下商和余数。
- 将商作为新的被除数重复步骤1,直到商为0。
- 将得到的余数逆序排列,这就是所求的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的逆序,对于每个元素ifor 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 = 0count = len(B) - 1for i in B:ten += (dic[i] * b ** count)count -= 1return 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 = 0count = len(B)-1for i in B:ten += (dic[i]*b**count)count -= 1return tendef Tentob(ten,b):B =[]s = ''while ten > 0:B.append(str(ten%b))ten = ten//bfor i in B[::-1]:if int(i) < 10:s += ielse:s += chr(int(i)+55)return sdic = {'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)