【刷题打卡】字节面试题 JS 实现36进制

493 阅读1分钟

前言:

这是一道字节的逻辑+简单算法题,用JavaScript实现36进制。在面试过程中,让你编写代码会很紧张,所以这是平时刷题中需要练习的。比如可以写一个注释思路,让自己稳住!

image.png

题目:

36进制由0 - 9,a - z,共36个字符表示,最小为'0'

  • '0''9'对应十进制的09,'a''z'对应十进制的1035
  • 例如:'1b' 换算成10进制等于 1 * 36 ^ 1 + 11 * 36 ^ 0 = 36 + 11 = 47
  • 要求按照加法规则计算出任意两个36进制正整数的和
  • 如:按照加法规则,计算'1b' + '2x' = '48'

实现代码

function getNum() {
    var nums36 = []
    for (var i = 0; i < 36; i++) {
        if (i >= 0 && i <= 9) {
            nums36.push(i)
        } else {
            nums36.push(String.fromCharCode(i + 87))//通过Unicode 值显示字符串  97 是 a
        }
    }
    //    console.log(nums36); 测试用例:打印 [0-9 a-z]
    return nums36
}

function base36(n) {
    var arr = []  //结果放进数组中
    // 首先我们要实现一个放入 0-9 a-z 的一个函数
    var nums = getNum()
    while (n) {
        var res = n % 36  //每一次除余的res就是nums36数组 的下标
        // console.log(res);
        arr.unshift(nums[res]) //unshift 是把值放入下标为0的位置(即放入头部,而不是尾部),和我们进位的思想刚好一致
        // console.log(arr,'+++++++++');
        n = parseInt(n / 36)
        // console.log(n,'-----------');
    }
    return arr.join('')
}
console.log(base36(36)); //10
console.log(base36(1409980009869));// hzqhoyh9

实现结果

image.png