首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >2025-12-13:十六进制和三十六进制转化。用go语言,给定一个整数 n,先求它的平方并把该值用大写字母的 16 进制表示(

2025-12-13:十六进制和三十六进制转化。用go语言,给定一个整数 n,先求它的平方并把该值用大写字母的 16 进制表示(

作者头像
福大大架构师每日一题
发布2025-12-19 10:10:06
发布2025-12-19 10:10:06
1390
举报

2025-12-13:十六进制和三十六进制转化。用go语言,给定一个整数 n,先求它的平方并把该值用大写字母的 16 进制表示(符号位按需处理,数位使用 0–9 与 A–F),再求它的立方并将该值用大写字母的 36 进制表示(数位使用 0–9 与 A–Z)。

最后将这两个进制字符串按顺序拼接,作为函数的返回结果。

1 <= n <= 1000。

输入:n = 13。

输出: "A91P1"。

解释:

n * n = 13 * 13 = 169。在十六进制中,它转换为 (10 * 16) + 9 = 169,对应于 "A9"。

n * n * n = 13 * 13 * 13 = 2197。在三十六进制中,它转换为 (1 * 362) + (25 * 36) + 1 = 2197,对应于 "1P1"。

连接两个结果得到 "A9" + "1P1" = "A91P1"。

题目来自力扣3602。

分步过程描述

  1. 1. 给定整数 n = 13 计算它的平方: ( n^2 = 13 \times 13 = 169 )
  2. 2. 平方值转换为十六进制
    • • 调用 toRadix(169, 16)
    • • 169 除以 16 的商和余数依次是:
      • • 169 ÷ 16 = 10 余 9
      • • 10 ÷ 16 = 0 余 10
    • • 余数映射到十六进制字符:9 → '9',10 → 'A'
    • • 余数收集的顺序是从低位到高位(9, 10),即 "9A",但最后要反转,所以得到 "A9"。
  3. 3. 计算立方 ( n^3 = 13 \times 13 \times 13 = 2197 )
  4. 4. 立方值转换为三十六进制
    • • 调用 toRadix(2197, 36)
    • • 2197 除以 36 的步骤:
      • • 2197 ÷ 36 = 61 余 1
        • • 余数 1 → '1'
      • • 61 ÷ 36 = 1 余 25
        • • 余数 25 → 'Z'?不对,要检查字母映射: 余数 0–9 → '0'–'9',余数 10 → 'A',余数 11 → 'B',…,余数 25 → 10+15 = 第 16 个字母? 10→A(0), 11→B(1), ..., 25 是 10+15,所以余数 25 是 10(A)+15 = 第 16 个字母是 P。 验证:余数 10 → 'A',11 → 'B',12 → 'C',…,25 → 'A' + 15 = 'P' ✅
      • • 1 ÷ 36 = 0 余 1
        • • 余数 1 → '1'
    • • 从低位到高位余数为 1, 25, 1,反转后是 1, 25, 1 → 字符 '1', 'P', '1' → 字符串 "1P1"。
  5. 5. 拼接结果
    • • 十六进制部分 "A9" + 三十六进制部分 "1P1" → "A91P1"

复杂度分析

假设 ( n ) 给定,平方和立方计算是 ( O(1) )。

  • • 进制转换时,循环次数取决于数字在相应进制下的位数,最坏情况出现在 ( n = 1000 ):
    • • 平方最大是 ( 10^6 ),十六进制下约 5 位。
    • • 立方最大是 ( 10^9 ),三十六进制下约 6 位。
    • • 每次循环是常数时间操作。

时间复杂度: 每次转换的位数是 ( O(\log M) ),这里 M 是 ( n^2 ) 或 ( n^3 )。由于输入 n ≤ 1000,位数不超过常数范围,所以可视为 ( O(1) )。但通常按大 O 表示法,是 ( O(\log n) )。

空间复杂度: 主要是 strings.Builder 存储的字符串长度,以及反转时用的 []rune 临时空间。额外空间与结果字符串长度成线性,结果字符串长度是 ( O(\log n) )。

结论

  • • 总时间复杂度:( O(\log n) )(但 n ≤ 1000 时可看作 ( O(1) ))
  • • 总额外空间复杂度:( O(\log n) )(存储转换结果所需空间)

Go完整代码如下:

.

代码语言:javascript
复制
package main

import (
    "fmt"
    "strings"
)

func concatHex36(n int)string {
    h := n * n
    ans := toRadix(h, 16)

    h = n * n * n
    ans += toRadix(h, 36)

    return ans
}

func toRadix(num, radix int)string {
    if num == 0 {
        return"0"
    }

    var builder strings.Builder
    for num > 0 {
        rem := num % radix
        var ch byte
        if rem < 10 {
            ch = byte('0' + rem)
        } else {
            ch = byte('A' + rem - 10)
        }
        builder.WriteByte(ch)
        num /= radix
    }

    // 反转字符串
    runes := []rune(builder.String())
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }

    returnstring(runes)
}

func main() {
    n := 13
    result := concatHex36(n)
    fmt.Println(result)
}

Python完整代码如下:

.

代码语言:javascript
复制
# -*-coding:utf-8-*-

def to_radix(num: int, radix: int) -> str:
    """将十进制整数转换为指定进制的字符串表示"""
    if num == 0:
        return"0"
    
    digits = []
    while num > 0:
        rem = num % radix
        if rem < 10:
            digits.append(chr(ord('0') + rem))
        else:
            digits.append(chr(ord('A') + rem - 10))
        num //= radix
    
    return''.join(reversed(digits))

def concat_hex36(n: int) -> str:
    """返回 n^2 的十六进制字符串与 n^3 的三十六进制字符串的拼接"""
    h = n * n
    ans = to_radix(h, 16)
    
    h = n * n * n
    ans += to_radix(h, 36)
    
    return ans

def main():
    n = 13
    result = concat_hex36(n)
    print(result)

if __name__ == "__main__":
    main()
在这里插入图片描述
在这里插入图片描述

C++完整代码如下:

.

代码语言:javascript
复制
#include <iostream>
#include <string>

std::string to_radix_no_reverse(int num, int radix) {
    if (num == 0) return"0";

    // 计算最大可能位数
    int temp = num;
    int digits = 0;
    while (temp > 0) {
        temp /= radix;
        digits++;
    }

    // 从最高位开始构建
    std::string result(digits, '\0');
    for (int i = digits - 1; i >= 0; --i) {
        int rem = num % radix;
        result[i] = (rem < 10) ? ('0' + rem) : ('A' + rem - 10);
        num /= radix;
    }

    return result;
}

int main() {
    int n = 13;
    std::string hex_part = to_radix_no_reverse(n * n, 16);
    std::string base36_part = to_radix_no_reverse(n * n * n, 36);
    std::cout << hex_part + base36_part << std::endl;

    return0;
}

我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分步过程描述
  • 复杂度分析
  • Go完整代码如下:
  • Python完整代码如下:
  • C++完整代码如下:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档