算法,十进制数转任意进制数

直接法把十进制转八进制或者十六进制,按照除8或者16取余,直到商为0为止。

 

 下面用JavaScript实现一下

复制代码
var Stack = (function () {
    var items = new WeakMap();
    //先入后出,后入先出
    class Stack {
        constructor() {
            items.set(this, []);
        }
        push(ele) {
            //入栈
            var ls = items.get(this);
            ls.push(ele);
        }
        pop() {
            //出栈
            var ls = items.get(this);
            return ls.pop();
        }
        size() {
            //获取栈的长度
            var ls = items.get(this);
            return ls.length;
        }
        print() {
            //打印栈
            var ls = items.get(this);
            return ls.toString();
        }
    }
    return Stack;
})();

/**
 * num 需要转化的数字
 * base 转化的进制,默认为 2
 * */
function devide(num, base) {
    base = Math.floor(base) || 2;
    if (typeof num != "number" || num < 0 || base > 36 || base < 2) {
        throw new Error("参数错误");
        return '';
    }
    num = Math.floor(num);

    var code = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var stack = new Stack();
    var res = '';
    var rem;
    while (num > 0) {
        rem = num % base;
        stack.push(rem);
        num = Math.floor(num / base);
    }

    while (stack.size() > 0) {
        res += code[stack.pop()];
    }

    return res;
}
console.log(devide(35, 36))
复制代码

任意进制转十进制

复制代码
function transfrom(num,base){
    //任意进制转十进制
    var bases = [0,1,2,3,4,5,6,7,8,9,"A","B","C","D","E","F"];
    var config = {};
    for(var k = 0; k < base; k++){
        config[bases[k]] = k;
    }
    num = String(num);
    num = num.toUpperCase();
    var count =  0;
    var res = 0;
    var i;
    while(num.length > 0){
        i  = num[num.length - 1];
        i = config[i];
        res = res + i * Math.pow(base,count);
        num = num.substr(0,num.length-1);
        count++;
    }
    return res;
}
 
console.log(transfrom('ff',16));
console.log(transfrom('11',2));
复制代码

 

posted @   Magi黄元  阅读(690)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示