2025 B卷 100分 题型
本专栏内全部题目均提供Java、python、JavaScript、C++等多种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》
华为OD机试真题《正整数到Excel编号之间的转换》:
文章快捷目录
题目描述及说明
Java
python
JavaScript
C++
题目名称:正整数到Excel编号之间的转换
- 知识点:字符串、进制转换(26进制)、逻辑处理
- 时间限制:1秒
- 空间限制:256MB
- 限定语言:不限
题目描述
给定一个正整数,将其转换为Excel表格中的列编号形式。Excel列编号规则如下:
- 列编号由大写字母
A
到Z
组成,依次对应数字1
到26
。 - 超过
26
时,使用两位字母表示,例如27
对应AA
,28
对应AB
,依此类推。 - 类似地,
702
对应ZZ
,703
对应AAA
,以此类推。
输入描述
一个正整数 n
(1 ≤ n ≤ 2^31 - 1
)。
输出描述
转换后的Excel列编号字符串(大写字母形式)。
示例
- 输入:
1
,输出:"A"
- 输入:
28
,输出:"AB"
- 输入:
701
,输出:"ZY"
- 输入:
2147483647
,输出:"FXSHRXW"
Java
问题分析
本问题要求将正整数转换为Excel列编号形式。Excel列编号使用大写字母表示,规则如下:
- 1-26 对应 A-Z
- 27 对应 AA
- 28 对应 AB
- 以此类推,702 对应 ZZ,703 对应 AAA
这本质上是一个26进制转换问题,但有以下关键区别:
- 没有0的表示(正常26进制有0-25)
- 每一位的数字范围是1-26(而不是0-25)
- 需要将数字转换为大写字母
解题思路
使用改进的26进制转换算法:
-
核心转换逻辑:
- 每次循环将n减1(消除1-26与0-25的偏移)
- 计算当前位的值:
(n-1) % 26
- 将余数转换为字母:
(char)('A' + remainder)
- 更新n:
(n-1) / 26
-
处理边界情况:
- 输入为1时直接返回"A"
- 处理大整数(最大到2^31-1)
-
构建结果字符串:
- 从低位到高位构建字母
- 反转字符串得到最终结果
代码实现
public class Main {
public static void main(String[] args) {
java.util.Scanner scanner = new java.util.Scanner(System.in);
int n = scanner.nextInt();
System.out.println(convertToTitle(n));
}
public static String convertToTitle(int n) {
// 处理特殊情况:n小于1(题目保证n≥1,但为健壮性考虑)
if (n < 1) {
return "";
}
StringBuilder sb = new StringBuilder();
// 循环处理直到n为0
while (n > 0) {
// 关键步骤:减1消除偏移
n--;
// 计算当前位的余数(0-25)
int remainder = n % 26;
// 将余数转换为大写字母
char ch = (char)('A' + remainder);
// 将字母添加到结果
sb.append(ch);
// 更新n为商
n = n / 26;