十进制转二进制

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 转化成二进制的数字。
notion image
当除法结果不为 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,以此类推。
 

© shallrise 2025