Как отмечают другие, ваш класс Stack
не имеет функций push
, pop
, isEmpty
.
Вот как я это сделаю (без использования какой-либо внешней библиотеки и реализации класса Stack с использованием JS Array).
function Stack() {
this.myStack = [];
this.push = function(val) {
this.myStack[this.myStack.length] = val;
};
this.isEmpty = function() {
return this.myStack.length <= 0;
};
this.pop = function() {
return this.myStack.splice(this.myStack.length - 1, 1)[0];
};
}
function divideBy2(decNumber) {
var remStack = new Stack(), rem, binaryString = '';
while (decNumber > 0) {
rem = Math.floor(decNumber % 2);
remStack.push(rem);
decNumber = Math.floor(decNumber / 2)
}
while (!remStack.isEmpty()) { //{5}
binaryString += remStack.pop().toString();
}
return binaryString;
}
console.log(divideBy2(233));
Если у вас есть возможность написать ES6, это то, что я бы предпочел.
class Stack {
myStack = [];
push = val => this.myStack[this.myStack.length] = val;
isEmpty = this.myStack.length <= 0;
pop = this.myStack.splice(this.myStack.length - 1, 1)[0];
reduce = reducer => this.myStack.reverse().reduce(reducer);
}
const buildStack = (remStack, decNumber) => {
if (decNumber > 0) {
remStack.push(Math.floor(decNumber % 2));
buildStack(remStack, Math.floor(decNumber / 2));
}
};
const divideBy2 = decNumber => {
const remStack = new Stack();
buildStack(remStack, decNumber);
return remStack.reduce((acc, v) => `${acc}${v}`, '');
}
console.log(divideBy2(233));