­

用栈实现一个十进制转二进制

  • 2019 年 10 月 4 日
  • 筆記

第一步 通过js 实现一个栈

//  封装栈  function Stack() {      //  栈的属性    this.items = []      //  栈的相关操作    //  1. 压栈    Stack.prototype.push  = function(ele) {      this.items.push(ele)    }      //  2. 从栈中取出元素    Stack.prototype.pop  = function() {      return this.items.pop()    }      //  3. 查看栈顶元素    Stack.prototype.peek = function() {      return this.items[this.items.length  - 1]    }      //  4. 判断栈是否为空    Stack.prototype.isEmpty = function() {      return this.items.length === 0    }      //  5. 或者栈中元素的数量    Stack.prototype.length = function() {      return this.items.length    }      //  6. toString方法    Stack.prototype.toString = function() {      // return this.items.toString()      var resString = ''      this.items.forEach( i => {        resString += i + ' '      } )      return resString    }    }

第二步 通过栈的形式 实现十进制转二进制

  // 函数: 将十进制转二进制  function dec2bin(decNumber) {      // 不是数字返回 Err    if(isNaN(decNumber)) throw('decNumber must a number' )      if(decNumber === 0) return '0'      // 取绝对值, 用来处理负数    var absDecNumber = Math.abs(decNumber)      // 1. 定义栈对象    var stack = new Stack()      // 2.循环操作    while(absDecNumber > 0) {      // 2.1 获取余数 压入栈中      stack.push(absDecNumber % 2)        // 2.2 获取整除后的余数结果,作为下一次允许的数字      absDecNumber = Math.floor(absDecNumber / 2)      }      // 3. 从栈中取出 0 和 1    var  binaryString = decNumber < 0 ? '-' : ''    while(!stack.isEmpty()) {      binaryString += stack.pop()    }      return binaryString  }