华为OD机试真题——正整数到Excel编号之间的转换(2025B卷:100分)Java/python/JavaScript/C++最佳实现

在这里插入图片描述

2025 B卷 100分 题型

本专栏内全部题目均提供Java、python、JavaScript、C++等多种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享

华为OD机试真题《正整数到Excel编号之间的转换》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C++


题目名称:正整数到Excel编号之间的转换


  1. 知识点:字符串、进制转换(26进制)、逻辑处理
  2. 时间限制:1秒
  3. 空间限制:256MB
  4. 限定语言:不限

题目描述

给定一个正整数,将其转换为Excel表格中的列编号形式。Excel列编号规则如下:

  • 列编号由大写字母 AZ 组成,依次对应数字 126
  • 超过 26 时,使用两位字母表示,例如 27 对应 AA28 对应 AB,依此类推。
  • 类似地,702 对应 ZZ703 对应 AAA,以此类推。

输入描述
一个正整数 n1 ≤ 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进制转换问题,但有以下关键区别:

  1. 没有0的表示(正常26进制有0-25)
  2. 每一位的数字范围是1-26(而不是0-25)
  3. 需要将数字转换为大写字母

解题思路

使用改进的26进制转换算法:

  1. 核心转换逻辑

    • 每次循环将n减1(消除1-26与0-25的偏移)
    • 计算当前位的值:(n-1) % 26
    • 将余数转换为字母:(char)('A' + remainder)
    • 更新n:(n-1) / 26
  2. 处理边界情况

    • 输入为1时直接返回"A"
    • 处理大整数(最大到2^31-1)
  3. 构建结果字符串

    • 从低位到高位构建字母
    • 反转字符串得到最终结果

代码实现

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;
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纪元A梦

再小的支持也是一种动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值