function Test36Bin(s, t) {
let chars = '0123456789abcdefghijklmnopqrstuvwxyz';
let carry = 0;
let result = '';
for (let i = s.length - 1, j = t.length - 1; s[i] || t[j]; --i, --j) {
let sum = carry + (s[i] ? chars.indexOf(s[i]) : 0) + (t[j] ? chars.indexOf(t[j]) : 0);
carry = Math.floor(sum / 36)
let r = sum % 36;
result += chars[r];
}
if (carry) {
result += '1'
}
return result.split('').reverse().join('');
}
思路类似大数相加、链表相加。
核心要点:从右往左相加,遇到有进制,carry = 1,保存下次使用,直到遍历完两个字符串,为了处理字符串长度不一的问题,使用三元运算符做处理,字符串长度不足用0补足。
要注意的地方:最后需要单独处理carry,并反转字符串。