基础概念
基数:表示基本数字符号的个数
10进制:0-9,基数为10
16进制:0-9,A-F,基数为16
权:每位表示的数值
123 1表示1个100,2表示2个10,3表示3个1
权 = 基数 ** x,x表示在当前第几位(从右往左)
方法
按权展开法:各位数字与它的权相乘,其积相加,和就是十进制数
除K取余法:十进制数字不断除以K求余数,然后逆序输出
n to 10
int_to_char = "0123456789ABCDEF" #十六进制所有的字符
char_to_int = {} #对应整数的索引字典
for idx,chr in enumerate(int_to_char): #遍历字符,赋值索引(相应的整数,比如A-10)
char_to_int[chr] = idx
print(char_to_int)
def K_to_Ten(k, x):
ans = 0
x = x[::-1] #倒序,使低位在前,方便计算。
n = len(x)
for i in range(n):
ans += (char_to_int[x[i]]) * k **i #按位进行运算
return ans
更高效的方法:
int_to_char ="0123456789ABCDEF"
char_to_int = {}
for idx, char in enumerate(int_to_char):
char_to_int[char] = idx
#k进制数字x转换成10进制:0-9、A-E
def K_To_Ten(k,x):
ans = 0
for char in x:
ans = ans * k + char_to_int[char] #(相当于每位数乘了k的位数次)
return ans
10 to n
def Ten_To_K(k, x):
ans = ""
while x != 0: #十进制输入的是整数,x不断求余和相除求出位数和对应的数量
ans += int_to_char[x % k]
x //= k
return ans[::-1]