把10进制转换为 2-36 任意进制

103 阅读1分钟

前言:其实这个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));

d44537fa249eb30797276ee03.jpg

资料

一看就懂-栈 :对栈的理解很深入、带图、带demo、带源码,十分适合初学者