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