整体思路
1. 核心功能
输入一个整数 n,计算其平方和立方,分别转换为 16 进制 和 36 进制 的字符串,并将结果拼接返回。
与使用 Java 内置方法不同,这段代码手写实现了进制转换算法(短除法/取模法),并且直接生成大写字母。
2. 算法逻辑
- 主函数 (
concatHex36):- 计算
n * n和n * n * n。 - 分别调用私有辅助函数
convert进行进制转换。 - 将两个结果拼接返回。
- 计算
- 辅助函数 (
convert):- 核心思想:利用除基取余法(Repeated Division and Modulo)。这是将十进制转换为任意进制的标准算法。
- 循环处理:
n % hex:取出当前最低位的数值t。- 字符映射:
- 如果
t < 10,直接转为字符 '0'-'9'。 - 如果
t >= 10,通过 ASCII 码计算转为 'A'-'Z'。公式(char)('A' + t - 10)实现了数值到字母的映射。
- 如果
s.append(t):将得到的字符加入StringBuilder。n /= hex:将数字除以基数,处理下一位。
- 反转:由于取余法是从低位到高位(从右向左)获取数字的,所以最后需要调用
s.reverse()将字符串翻转,得到正确的顺序。
完整代码
class Solution {
public String concatHex36(int n) {
// 分别计算平方转 16 进制,立方转 36 进制,然后拼接
// 注意:这里 n*n*n 仍然存在 int 溢出的风险,如果 n 较大建议强转 long
return convert(n * n, 16) + convert(n * n * n, 36);
}
// 辅助方法:将整数 n 转换为 hex 进制的字符串
// n: 待转换的数值
// hex: 目标进制 (例如 16 或 36)
private String convert(int n, hex) {
();
(n != ) {
n % hex;
(t < ) {
s.append(t);
} {
s.append(() ( + t - ));
}
n /= hex;
}
s.reverse().toString();
}
}

