面试题:写一个函数将10进制转化为2-9进制的任意进制

77 阅读1分钟

面试题:写一个函数将10进制转化为2-9进制的任意进制

这是一道之前面试提到题,到时确实没有想到有效的解决方法,挺遗憾的今天突然想起了这道题就让我弥补遗憾吧!

该题目的意思是,给你一个 10 进制数比如 120 转化为 7 进制 然后写一个函数,该函数有参数 target(10进制数) system(需要转换的进制数, 1 < system > 10) 函数返回一个字符串表示 120 转化后的 7 进制该是多少。

原理图

企业微信截图_16468923953221.png

代码实操 这里使用 ts 书写

    /**
 * 之前在面试题中 遇到一个 写一个函数 将10进制 转化为任何进制的方法
 * 结题思路
 * 10进制转为2进制 我们通常 是 /2 /2 /2 这种方法 也同样适用于其他的 进制转换
 */
 
function systemTransition(target: number, system: number): string {
    if(system < 2 || system > 9 )return '';
    //是否是负数
    const isMinus = target < 0;
    //取绝对值
    target = Math.abs(target);
    //保存结果
    let result: string = ``;
    //记录余数
    let remainder: number;
    while (true) {
        if (target >= system) {
            //本次的余数
            remainder = target % system;
            result += remainder;
            //减去余数 然后再整除
            target = (target - remainder) / system
        } else {
            result += target;
            result = result.split('').reverse().join('');
            //判断正负
            return isMinus ? '-' + result : result
        }

    }
}

测试

    systemTransition(120,9); // 143
    systemTransition(120,8); // 170
    systemTransition(120,7); // 231
    systemTransition(120,6); // 320
    systemTransition(120,5); // 440
    systemTransition(120,4); // 1320
    systemTransition(120,3); // 11110

总结:虽然不是什么很厉害的写法,但还是解决了之前不会的难题,也算是一种成长吧!