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

第一步 通过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
}

你可能感兴趣的:(用栈实现一个十进制转二进制)