# 进制转换

实现一个算法,可以把十进制转换成二进制。

function declimaToBinary(num) {
    const stack = new Stack();
    let rem;
    while (num > 0) {
        rem = Math.floor(num % 2);
        stack.push(rem)
        num = Math.floor(num / 2)
    }
    let binaryString = ''
    while (!stack.isEmpty()) {
        binaryString += stack.pop().toString()
    }
    return binaryString
}

console.log(declimaToBinary(10));
console.log(declimaToBinary(5));
console.log(declimaToBinary(100));

实现一个算法,可以把十进制转换成基数为 2-36 的任意进制。

function baseConverter(num, base) {
    if (!(base >= 2 && base <= 36)) {
        return ''
    }
    const stack = new Stack()
    const digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    let rem;
    let baseString = '';
    while (num > 0) {
        rem = Math.floor(num % base)
        stack.push(rem);
        num = Math.floor(num / base);
    }
    while (!stack.isEmpty()) {
        baseString += digits[stack.pop()]
    }
    return baseString;
}

console.log(baseConverter(31, 16));

在讲十进制转换为二进制时,余数时 01;在转换为八进制时,余数时 0-7;但是在将十进制转换为十六进制时,余数是 0-9 加上 A、B、C、D、E和F(对应10、11、12、13、14、15)。因此,我们需要对栈中的数字做一些转换才行,如上

更新时间: 11/24/2020, 10:17:53 AM