36进制求和

36进制求和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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('');
}

console.log(Test36Bin('zzzy', 'zz'));

讲解

  1. 获取36进制的所有字符
  2. 从后往前遍历两个字符串,如果有一个字符串遍历完了,就用0代替
  3. 求和,如果有进位,就加到下一次求和中
  4. 求和后,如果大于36,就取整,然后求余,余数就是当前位的值
  5. 如果有进位,就在最后加1
  6. 最后把结果反转,就是最终结果
  7. 36进制的最大值是zzzz,所以最大值是1295,所以不会超过1295
  8. 36进制的最小值是0,所以最小值是0,所以不会小于0

36进制求和
https://xiehongchen.github.io/2023/04/28/36进制求和/
作者
XieHongchen
发布于
2023年4月28日
许可协议