36进制数由 09 , az 共 36 个字符组成,请你按照加法规则计算两个 36 进制数的和。
例如 1b+2b = 3m
数据范围:两个数的长度都满足 1≤n≤10^6 1≤n≤1^06 , 两个数中包含的字符仅包0−9 和 a−z
func getChar(n int) byte {
if n <= 9 {
return byte(n + '0')
}
return byte(n - 10 + 'a')
}
func getInt(ch byte) int {
if ch >= '0' && ch <= '9' {
return int(ch - '0')
}
return int(ch - 'a' + 10)
}
func thirtysixAdd(num1 string, num2 string) string {
i, j := len(num1)-1, len(num2)-1
carry := 0
var res []byte
for i >= 0 || j >= 0 || carry > 0 {
var x, y int
if i >= 0 {
x = getInt(num1[i])
i--
}
if j >= 0 {
y = getInt(num2[j])
j--
}
sum := x + y + carry
res = append(res, getChar(sum%36))
carry = sum / 36
}
for l, r := 0, len(res)-1; l < r; l, r = l+1, r-1 {
res[l], res[r] = res[r], res[l]
}
return string(res)
}