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

96. 2017年蓝桥杯省赛 - Excel地址(困难)- 进制转换

96. Excel地址(进制转换)

1. 2017年蓝桥杯省赛 - Excel地址(困难)

标签:2017 省赛

1.1 题目描述

Excel 单元格的地址表示很有趣,它使用字母来表示列号。

比如,

A 表示第 1 列,

B 表示第 2 列,

Z 表示第 26 列,

AA 表示第 27 列,

AB 表示第 28 列,

BA 表示第 53 列,

⋯⋯

当然 Excel 的最大列号是有限度的,所以转换起来不难。

如果我们想把这种表示法一般化,可以把很大的数字转换为很长的字母序列呢?

本题目即是要求对输入的数字, 输出其对应的 Excel 地址表示方式。

1.2 输入描述

输入一个整数 n n n,其范围 [ 1 , 2147483647 ] [1,2147483647] [1,2147483647]

1.3 输出描述

输出 n n n 对应的 Excel 地址表示方式。

1.4 输入输出样例

示例

输入

26

输出

Z

1.5 运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

2. 解题思路

在这里插入图片描述

本题的本质是将一个整数 n n n 转换为 Excel 地址表示法,类似于 进制转换,但这里采用的是 26 进制的变种,不同之处在于:

  • Excel 列号以 1 开始(A = 1, B = 2, …, Z = 26),而不是传统的 0 开始。
  • 当某一位等于 0 时,应当调整为 ‘Z’,并向高位借 1(例如 n = 26 n=26 n=26 映射为 'Z',而不是 'A0')。

数学推导

我们需要将 n n n 转换成 基于 26 进制的字母表示,对应于 从 1 到 26 的编号

对于一个给定的 n n n ,我们按照如下步骤进行转换:

  1. 取模运算 计算最后一位的字母:
    index = ( n − 1 ) m o d 26 + 1 \text{index} = (n - 1) \mod 26 + 1 index=(n1)mod26+1

    这里 ( n − 1 ) (n - 1) (n1) 处理了 1索引映射 问题,确保 1 → A , 26 → Z 1 \to A,\ 26 \to Z 1A, 26Z.

  2. 除以 26,去掉最后一位,继续处理剩余部分:
    n = ( n − 1 ) ÷ 26 n = (n - 1) \div 26 n=(n1)÷26

    这里 ( n − 1 ) (n - 1) (n1) 也用于处理 高位借 1 的情况,使得 n = 26 n=26 n=26 映射为 'Z',而不是 'A0'

  3. 重复步骤 1 和 2,直到 n = 0 n=0 n=0,然后逆序输出。


3. 代码实现

# n = 26**2 + 26 * 26 + 26
n = int(input())# A = 1, B = 2, C = 3, ..., Z = 26
# AA = 26 + 1, AB = 26 + 2, AC = 26 + 3, ..., AZ = 26 + 26
# BA = 26*2 + 1, ..., BZ = 26*2 + 26s = []while n > 0:n -= 1  # 处理索引偏移,使0+1映射到A,25+1映射到Zm = n % 26s.append(chr(m + ord('A')))  # 转换为字母n //= 26  # 继续处理高位print(''.join(s[::-1]))

4. 复杂度分析

  • 时间复杂度 O ( log ⁡ 26 n ) O(\log_{26} n) O(log26n),每次除以 26 26 26,最多进行 log ⁡ 26 2147483647 ≈ 7 \log_{26} 2147483647 \approx 7 log2621474836477 次计算。
  • 空间复杂度 O ( 1 ) O(1) O(1),使用固定大小的字符串列表。
http://www.xdnf.cn/news/12388.html

相关文章:

  • 大数据学习(131)-Hive数据分析函数总结
  • 金融系统渗透测试
  • 【Kotlin】协程
  • .net 使用MQTT订阅消息
  • 使用React+ant Table 实现 表格无限循环滚动播放
  • 【Oracle APEX开发小技巧12】
  • 使用VuePress2.X构建个人知识博客,并且用个人域名部署到GitHub Pages中
  • 基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
  • CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
  • stylus - 新生代CSS预处理框架
  • vue-video-player视频保活成功确无法推送问题
  • 爆炸仿真的学习日志
  • 在MyBatis中设计SQL返回布尔值(Boolean)有几种常见方法
  • Web攻防-SQL注入二次攻击堆叠执行SQLMAPTamper编写指纹修改分析调试
  • 《基于Apache Flink的流处理》笔记
  • Python Einops库:深度学习中的张量操作革命
  • 体制内 AI写作:推荐材料星 AI文章修改润色
  • MySQL:忘记root密码
  • GPU 图形计算综述 (三):可编程管线 (Programmable Pipeline)
  • 【动手学MCP从0到1】2.3 MCP中的Resource和Resource Template服务构建步骤详解
  • 建筑设备一体化监控系统:提升能效与运维效率
  • MySQL 的 redo log 和 binlog 区别?
  • 为 ESP32 解锁跨平台存储识别能力:支持 FAT、NTFS、EXT4、APFS 的轻量级 BlockFS 组件
  • Java中的阻塞队列
  • [arthas]arthas安装使用
  • NVM!(可以快速替换你的node版本)
  • Mysql主从复制原理分析
  • 高性能分布式消息队列系统(三)
  • CVE-2020-17518源码分析与漏洞复现(Flink 路径遍历)
  • AtCoder 第408​场初级竞赛 A~E题解