前言:其实这个demo也放在电脑蛮久的了,今天梳理了整理出来
在大学的时候都学习过遇到过进制转换这个问题;现实生活中,我们主要使用的是十进制,但在计算科学中,二进制非常重要,因为计算机里的所有内容都是用二进制数字表示的(0 和 1)。没有十进制和二进制相互转化的能力,与计算机交流就很困难。
要进行进制转换,要把十进制转化成二进制,我们可以将该十进制数除以 2(二进制是满二进一)并对商取整, 直到结果是 0 为止; 大学的计算机课一般都会先教这个进制转换
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ 从十一进制开始,每个字母表代表进制的位基数,A = 11、B = 12, 以此类推
/**
* 进制转换
* @param {*} decNumber // 数值 number
* @param {*} base // 基数 number
*/
function baseConversion(decNumber, base) {
const remStack = new Stack();
const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
let number = decNumber;
let rem;
let baseString = '';
if (!(base >= 2 && base <= 36)) {
return '';
}
// 除尽, 对数值进行整除,直到为0为止, 由于js数值可能会是浮点数类型(float),
// 这里需要使用Math.floor取整, 最后在 pop 删除
while (number > 0) {
rem = Math.floor(number % base);
remStack.push(rem);
number = Math.floor(number / base);
}
// 拼接
while (!remStack.isEmpty()) {
baseString += digits[remStack.pop()]; // {7}
}
return baseString;
}
- 测试:
console.log(baseConversion(1390, 16));
资料
一看就懂-栈 :对栈的理解很深入、带图、带demo、带源码,十分适合初学者