
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。
toRadix(169, 16)toRadix(2197, 36)假设 ( n ) 给定,平方和立方计算是 ( O(1) )。
时间复杂度: 每次转换的位数是 ( O(\log M) ),这里 M 是 ( n^2 ) 或 ( n^3 )。由于输入 n ≤ 1000,位数不超过常数范围,所以可视为 ( O(1) )。但通常按大 O 表示法,是 ( O(\log n) )。
空间复杂度:
主要是 strings.Builder 存储的字符串长度,以及反转时用的 []rune 临时空间。额外空间与结果字符串长度成线性,结果字符串长度是 ( O(\log n) )。
结论:
.
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)
}

.
# -*-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()
.
#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助力您的未来发展。