面试题:写一个函数将10进制转化为2-9进制的任意进制
这是一道之前面试提到题,到时确实没有想到有效的解决方法,挺遗憾的今天突然想起了这道题就让我弥补遗憾吧!
该题目的意思是,给你一个 10 进制数比如 120 转化为 7 进制 然后写一个函数,该函数有参数 target(10进制数) system(需要转换的进制数, 1 < system > 10) 函数返回一个字符串表示 120 转化后的 7 进制该是多少。
原理图
代码实操 这里使用 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
总结:虽然不是什么很厉害的写法,但还是解决了之前不会的难题,也算是一种成长吧!