美文网首页让前端飞
JavaScript 任意进制转换算法

JavaScript 任意进制转换算法

作者: 贵在随心 | 来源:发表于2019-04-11 15:54 被阅读0次

这里需要借助 JavaScript 中 这个数据结构,栈的相关知识如下图:

一、创建类[1]

首先需要创建一个 stack.js 文件来存储 Stack(栈)类,如下代码:

export default class Stack {
  constructor() {
    this.count = 0;
    this.items = {};
  }

  push(element) {
    this.items[this.count] = element;
    this.count++;
  }

  pop() {
    if (this.isEmpty()) {
      return undefined;
    }
    this.count--;
    const result = this.items[this.count];
    delete this.items[this.count];
    return result;
  }

  peek() {
    if (this.isEmpty()) {
      return undefined;
    }
    return this.items[this.count - 1];
  }

  isEmpty() {
    return this.count === 0;
  }

  size() {
    return this.count;
  }

  clear() {
    this.items = {};
    this.count = 0;
  }

  toString() {
    if (this.isEmpty()) {
      return '';
    }
    let objString = `${this.items[0]}`;
    for (let i = 1; i < this.count; i++) {
      objString = `${objString},${this.items[i]}`;
    }
    return objString;
  }
}

二、十进制转换成二进制[2]

我们来看看如何把十进制转换成二进制?
看代码中的注释说明:

// decNumber 为传入的十进制数
function decimalToBinary(decNumber) {
  // 使用 stack.js 中 Stack 类
  const remStack = new Stack();
  let number = decNumber;
  let rem;
  let binaryString = '';

  while (number > 0) {
    // 获得余数为2的数
    rem = Math.floor(number % 2);
    // 把2的余数放入栈中
    remStack.push(rem);
    // 把传入的十进制数与2整除
    number = Math.floor(number / 2);
  }

  while (!remStack.isEmpty()) {
    // 用 pop 方法把栈中的元素都移除,再组成一个字符串
    binaryString += remStack.pop().toString();
  }

  return binaryString;
}

// test
console.log(decimalToBinary(33));   //100001
console.log(decimalToBinary(100)); //1100100

注:为啥使用 Math.floor => javascript 中的数字类型不会区分数字是整数还是浮点数。

三、任意进制之间的转换[3]

为了让进制转换更灵活,需要改动一下函数,如下代码:

// decNumber 为传入的要转换的十进制数字
// base: 要转成的进制类型
function baseConverter(decNumber, base) {
  // 创建 Stack 类
  const remStack = new Stack();
  // 定义一个进制位数,这里设置了 36 位进制,可自定义位数
  const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  let number = decNumber;
  let rem;
  let baseString = '';

  if (!(base >= 2 && base <= 36)) {
    return '';
  }

  while (number > 0) {
    rem = Math.floor(number % base);
    remStack.push(rem);
    number = Math.floor(number / base);
  }

  while (!remStack.isEmpty()) {
    // 对栈中的数字做转化
    baseString += digits[remStack.pop()];
  }

  return baseString;
}

// test
console.log(baseConverter(1314, 2));    //10100100010
console.log(baseConverter(1314, 8));    //2442
console.log(baseConverter(1314, 16));    //522
console.log(baseConverter(1314, 20));    //35E
console.log(baseConverter(1314, 30));    //1DO
console.log(baseConverter(1314, 35));    //12J

  1. 创建类

  2. 十进制转换成二进制

  3. 任意进制之间的转换

相关文章

  • JavaScript 任意进制转换算法

    这里需要借助 JavaScript 中 栈 这个数据结构,栈的相关知识如下图: 一、创建类[1] 首先需要创建一个...

  • python 进制转换

    如何表示二进制 任意进制之间的转换 任意进制转换成二进制--bin 任意进制转换成十进制--int 3.任意进制转...

  • 极客时间数据结构与算法之美笔记21-22

    什么是哈希算法 能将任意长度的二进制数据转换为固定长度的二进制数据的算法,是哈希算法。 哈希算法的用途 密码加密 ...

  • JavaScript 中任意进制的转换

    在 JavaScript 中,有两个系统方法 parseInt 和 toString,综合运用这两个方法,可以实现...

  • java 基础(一)

    1、进制图解 2、进制表示 3、任意进制到十进制转换 4、十进制到任意进制 5、8421快速转换法 6、原码、反码...

  • 任意进制转换

    输入数字n和相应的进制,输出n对应的k进制数

  • 任意进制转换

    ​- 课程大类AGENDA -01 Scratch 初中高01 女性编程日周二02 Python 编程思维02 数...

  • Hash函数

    摘要算法又称为哈希算法,散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符...

  • 任意进制大数转换

    问题描述:将用字符串表示的M进制大数,转化为用字符串表示的N进制大数。1

  • JS 用栈的方式实现十进制对任一进制的转换

    1. 建一个栈类 2. 借助栈对象做十进制对任一进制的转换 摘录自 《学习JavaScript数据结构与算法》

网友评论

    本文标题:JavaScript 任意进制转换算法

    本文链接:https://www.haomeiwen.com/subject/rdutwqtx.html