k进制转十进制

一、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.依照按权展开写的代码,运行时间会长一些,这个需要颠倒一下字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值