一、k进制转十进制的原理
1.口诀:按权展开
1.1解释:按权展开法就是将 k 进制数的每一位数字乘以该位对应的权值,然后将所有乘积相加,得到的结果就是对应的十进制数。
1.2权值:对于一个 k 进制数,从右往左,各个数位的权值分别是k0,k1,k2,k3,⋯ 。也就是说,第n位(从右往左数,从 0 开始计数)的权是kn。
图解:
eg.二进制:1010转为十进制:10
我们可以像第一步把他的权值找出来,再进行第二步将每位数与对应的权值相乘,最后求和。
1.3代码:
#准备工作
int_to_char = "0123456789ABCDEF"
char_to_int = {}
for k, v in enumerate(int_to_char):
char_to_int[v] = k
#k进制转十进制的函数
def k_to_ten(k, x):
#k表示进制,x表示k进制的数
ans = 0
#这里要换个顺序,方便后面的循环
x = x[::-1]
for i in range(len(x)):
#按权展开
ans += k**i*char_to_int[x[i]]
return ans
k = 8
x = "3506"
a = k_to_ten(k, x)
print(a)
这这里就像前文十进制转k进制一样,把k进制看作str类型,把十进制看做int类型。
1.4对于按权展开使用递推式:(优化)
int_to_char = "0123456789ABCDEF"
char_to_int = {}
for k, v in enumerate(int_to_char):
char_to_int[v] = k
def k_to_ten(k, x):
ans = 0
#使用递推式:
for char in x:
ans = ans * k + char_to_int[char]
return ans
k = 8
x = "3506"
a = k_to_ten(k, x)
print(a)
二、总结
1.记住口诀:按权展开
2.两种不同的代码
a.依照按权展开写的代码,运行时间会长一些,这个需要颠倒一下字符串