【算法】 进制转换(附蓝桥杯真题) python


模板

k进制 --> 十进制

code:

def char_to_int(c):  
    if '0' <= c <= '9':  
        return ord(c) - ord('0')  
    if 'A' <= c <= 'F':  
        return ord(c) - ord('A') + 10  
  
def base_10(s: str, k: int) -> int:  
    res = 0  
    n = len(s)  
    for i in range(n):  
        res = res * k + char_to_int(s[i])  
    return res  
  
print(base_10('10111', 2))  # 23  
print(base_10('3506', 8))  # 1862  

十进制 --> k进制

code:

def int_to_char(i):  
    if 0 <= i <= 9:  
        return chr(ord('0') + i)  
    elif 10 <= i <= 15:  
        return chr(ord('A') + i - 10)  
  
def base_k(s: str, k: int) -> str:  
    s = int(s)  
    res = ''  
    while s > 0:  
        res += int_to_char(s % k)  
        s //= k  
    return res[::-1]  
  
print(base_k(23, 2))  # 10111  
print(base_k(1862, 8))  # 3506


小试牛刀


https://www.lanqiao.cn/problems/1230/learning/


n进制 --> m进制 (n进制 --> 10进制 , 10进制 --> m进制)



AC_code:

import sys  
input = sys.stdin.readline  
  
# k进制 --> 十进制  
def char_to_int(c):  
    if '0' <= c <= '9':  
        return ord(c) - ord('0')  
    if 'A' <= c <= 'F':  
        return ord(c) - ord('A') + 10  
  
def base_10(s: str, k: int) -> int:  
    res = 0  
    n = len(s)  
    for i in range(n):  
        res = res * k + char_to_int(s[i])  
    return res  
  
# 十进制 --> k进制  
def int_to_char(i):  
    if 0 <= i <= 9:  
        return chr(ord('0') + i)  
    elif 10 <= i <= 15:  
        return chr(ord('A') + i - 10)  
  
def base_k(s: str, k: int) -> str:  
    s = int(s)  
    res = ''  
    while s > 0:  
        res += int_to_char(s % k)  
        s //= k  
    return res[::-1]  
  
t = int(input())  
for _ in range(t):  
    n, m = map(int, input().split())  
    s = input().strip()  
    tmp = str(base_10(s, n))  
    print(base_k(tmp, m))


真题演练


第十五届蓝桥杯省赛Python组A题


AC_code:

def base_k(s, k):  
    res = ''  
    while s:  
        res += str(s % k)  
        s //= k  
    return res[::-1]  
  
ans = 0  
for i in range(1, 2025):  
    tmp1 = base_k(i, 2)  
    tmp2 = base_k(i, 4)  
    cnt1, cnt2 = 0, 0  
    for j in range(len(tmp1)):  
        cnt1 += int(tmp1[j])  
    for k in range(len(tmp2)):  
        cnt2 += int(tmp2[k])  
    if cnt1 == cnt2:  
        ans += 1  
print(ans)


END
如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
如果喜欢的话,请给博主点个关注 谢谢

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值