目录
五、进制转换
十进制转任意进制,任意进制转十进制
例题 P1230 进制转换
作业 P2095 进制转化
作业 P2489 进制
五、进制转换
十进制转任意进制,任意进制转十进制
int_to_char = "0123456789ABCDEF" def Ten_to_K(k, x): answer = "" while x != 0: # int_to_char[x % k] 用于获取余数对应的字符 answer += int_to_char[x % k] # 将 x 整除 k,更新 x 的值 x //= k # 由于是从低位到高位构建 answer,所以需要将其反转后返回 return answer[::-1] char_to_int = {} # 使用 enumerate 遍历 int_to_char 字符串 # idx 是字符的索引,chr 是字符串中的每个字符 for idx, chr in enumerate(int_to_char): # 将每个字符作为键,其索引作为值,添加到 char_to_int 字典中 char_to_int[chr] = idx def K_to_Ten(k, x): answer = 0 # 将输入的数字符串 x 反转,以便从低位到高位处理 x = x[::-1] for i in range(len(x)): # 将每一位字符对应的数值乘以 k 的 i 次幂,并累加到 answer 中 # char_to_int[x[i]] 获取字符对应的数值 answer = answer + char_to_int[x[i]] * k ** i return answer
例题 P1230 进制转换
给定一个 N 进制数 S,请你将它转换为 M 进制。
输入描述
第一行为一个整数 T,表示测试数据数量。 (1≤T≤10^5)
每个测试用例包含两行,第一行包含两个整数 N,M。
第二行输入一个字符串 S,表示 N 进制数。
数据范围保证:2≤N,M≤16,若 N≥10,则用 A∼F 表示字码 10∼15。保证 S 对应的十进制数的位数不超过 10。
输出描述
输出共 T,每行表示一组数据的答案。
int_to_char="0123456789ABCDEF" def Ten_to_K(k,x): answer="" while x !=0: answer+=int_to_char[x%k] x//=k return answer[::-1] char_to_int={} for idx,chr in enumerate(int_to_char): char_to_int[chr]=idx def K_to_Ten(k,x): answer=0 x=x[::-1] for i in range(len(x)): answer=answer+char_to_int[x[i]]*k**i return answer T=int(input()) for _ in range(T): N,M=map(int,input().strip().split()) S=input().strip() # N转换为10进制,10进制转化为M进制 y=K_to_Ten(N,S) z=Ten_to_K(M,y) print(z)
作业 P2095 进制转化
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
九进制正整数 (2022)9 转换成十进制等于多少?
print(1478)
int_to_char="0123456789ABCDEF" char_to_int={} for idx,chr in enumerate(int_to_char): char_to_int[chr]=idx # 请在此输入您的代码 def K_to_Ten(k,x): answer=0 x=x[::-1] for i in range(len(x)): answer=answer+char_to_int[x[i]]*k**i return answer print(K_to_Ten(9,"2022"))
作业 P2489 进制
请问十六进制数 2021ABCD 对应的十进制是多少?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
print(539077581)
int_to_char="0123456789ABCDEF" char_to_int={} for idn,chr in enumerate(int_to_char): char_to_int[chr]=idn def K_to_Ten(k,x): answer=0 x=x[::-1] for i in range(len(x)): answer=answer+char_to_int[x[i]]*k**i return answer print(K_to_Ten(16,"2021ABCD"))