根据除数取余的方法可以求出二进制结果,结果与出栈方式类似,因此使用栈来写
// 自定义封装一个栈
// 声明一个栈结构
function Stack() {
// 用数组来存储数据,自己声明绑定一个属性在实例上面
this.items = []
// 在每一个实例上面都挂载这个方法,浪费空间
// this.push=function(){}
// 尽量使用这个形式,挂载在Stack的原型上面
// 1、压栈(push函数)
Stack.prototype.push = function (element) {
this.items.push(element)
}
// 2、出栈并返回元素(pop函数)
Stack.prototype.pop = function () {
return this.items.pop()
}
///3、peek返回栈顶元素不做修改(peek函数)
Stack.prototype.peek = function () {
return this.items[this.items.length - 1]
}
///4、判断栈是否为空(isEmpty)
Stack.prototype.isEmpty = function () {
return this.items.length == 0
}
//5、查看栈中元素个数(size)
Stack.prototype.size = function () {
return this.items.length
}
// 6、toString方法
Stack.prototype.toString = function () {
let str = ""
for (let i = 0; i < this.items.length; i++) {
str += this.items[i] + " "
}
return str
}
}
//测试一下
let stack1 = new Stack()
stack1.push(10)
stack1.push(20)
console.log(stack1.peek()); //20
console.log(stack1.size()); //2
stack1.pop()
console.log(stack1.size()); //1
function dec2bin(num) {
let s = new Stack()
while (num>0) {
s.push(num % 2)
// console.log(parseInt(num / 2));
// num = parseInt(num / 2)
num=Math.floor(num/2)
}
// 这个会输出栈底到栈顶的元素
// console.log(s.toString());
let binStr=""
// 要先声明len
let len=s.size()
for(let i=0;i<len;i++){
binStr+=s.pop()
}
return binStr
}
console.log(dec2bin(100)); //1100100
运行结果: