用栈实现一个十进制转二进制
- 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 }