十进制转二进制
date
Mar 13, 2023
slug
ja-stack-decimal-binary
status
Published
tags
JavaScript数据结构与算法
stack
JavaScript
summary
Apply decimal to binary with JavaScript stack
type
Post
十进制转二进制
要把十进制转化成二进制,我们可以将该十进制数除以 2(二进制是满二进一)并对商取整, 直到结果是 0 为止。如把十进制的数 10 转化成二进制的数字。

当除法结果不为 0 时,我们会获得一个余数,并放到栈里,然后让结果继续除以2。使用 Math.floor 函数返回除法运算结果的整数部分。最后,用 pop 方法把栈中的元素都移除,把出栈的元素连接成字符串。
栈十进制转二进制
class Stack{
constructor(){
this.items = [];
}
push(element){
this.items.push(element);
}
pop(){
return this.items.pop();
}
isEmpty(){
return this.items.length === 0;
}
}
function decimalToBinary(decNumber){
let stack = new Stack();
let numbers = decNumber;
let rem;
let binaryString = '';
while(numbers > 0){
rem = Math.floor(numbers % 2);
stack.push(rem);
numbers = Math.floor(numbers / 2);
}
while(!stack.isEmpty()){
binaryString += stack.pop().toString();
}
return binaryString;
}
console.log(decimalToBinary(10));
进制转换算法
把十进制转换成基数为 2~36 的任意进制。除了把十进制 数除以 2 转成二进制数,还可以传入其他任意进制的基数为参数。
function baseConverter(decNumber,base){
const stack = new Stack();
//对栈中的数字做转化①
const digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
let numbers = decNumber;
let rem;
let binaryString = '';
if(!(base >= 2 && base <= 36)){
return '';
}
while(numbers > 0){
rem = Math.floor(numbers % base);
stack.push(rem);
numbers = Math.floor(numbers / base);
}
while(!stack.isEmpty()){
binaryString += digits[stack.pop()];//②
}
return binaryString;
}
在将十进制转成二进制时,余数是 0 或 1;在将十进制转成八进 制时,余数是 0~7;但是将十进制转成十六进制时,余数是 0~9 加上 A、B、C、D、E 和 F(对 应 10、11、12、13、14 和 15)。因此,我们需要对栈中的数字做个转化才可以(①和②)。 因此,从十一进制开始,字母表中的每个字母将表示相应的基数。字母 A 代表基数 11,B 代表 基数 12,以此类推。