当前位置: 首页 > article >正文

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


http://www.kler.cn/a/589683.html

相关文章:

  • Elasticsearch面试题
  • Docker命令解析:加速你的容器化之旅(以Nginx为例)
  • 爬虫逆向:逆向中用到汇编语言详细总结
  • Pygame实现记忆拼图游戏7
  • 接口请求限制自定义注解
  • 机器学习核心概念解读
  • Webpack构建流程详解优化前端性能\Dev-Server与Proxy\网络攻击\HMR
  • 深入解析 Spring Boot 中的 FailureAnalyzer
  • C++菱形继承内存模型
  • ONENET数据可视化命令框下发命令使用
  • 内网环境安装dlv,本地远程调试go
  • 自动化实施的常用元件有哪几种?
  • hadoop-配置安装jdk
  • Linux目录结构以及文件操作
  • IDEA的相关配置
  • 孤儿进程与僵尸进程:Linux进程管理中的“隐形杀手”与“无主孤儿”
  • 蓝桥杯 之 数学规律求解
  • React:React主流组件库对比
  • 【数据库】Data Model(数据模型)数据模型分析
  • AGI大模型(8):提示词的安全与防护