题目描述:给定一个十进制数,请转成k进制(k不大于36),如果k大于10,则从A开始算。
分析:
除k取余逆序排列法,首先根据k制作一个进制数字数组,然后将十进制数进行除k取余,更新十进制数为除数,并逆序排余数,直到除数为0。
求解:
function createNumOfRadix(radix: number, cases = 'upper') {
if (radix < 2 || radix > 36) {
throw new TypeError('radix must be 2 ~ 36');
}
const base = cases === 'upper' ? 55 : 87;
return new Array(radix).fill(0).map((_, index) => {
if (index < 10) {
return String(index);
}
return String.fromCharCode(index + base);
});
}
export function numToString(intValue: number, radix = 10) {
if (typeof intValue !== 'number') {
throw new TypeError('intValue must be a number');
}
const numOfRadix = createNumOfRadix(radix);
let res = '';
while (intValue) {
/** 除 k 取 余,逆序排列 */
res = numOfRadix[intValue % radix] + res;
intValue = Math.floor(intValue / radix);
}
return res;
}