【算法解析】进制转换实战(附蓝桥杯真题详解)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
如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
如果喜欢的话,请给博主点个关注 谢谢

作者:查理零世

物联沃分享整理
物联沃-IOTWORD物联网 » 【算法解析】进制转换实战(附蓝桥杯真题详解)Python实现

发表回复