在 JavaScript 中将十进制编码为阶乘并返回
问题
用阶乘编码十进制数是一种在依赖于阶乘而不是数的幂的基本系统中写出数字的方法。
在此系统中,最后一位数字始终为0,并且以0为基数!。前面的数字是0或1,以1为底!前面的数字是0、1或2,以2为基数!等。更一般地说,倒数第n个数字始终是0、1、2、...、n且以n为基数!.
我们将需要两个函数。第一个将接收一个十进制数并返回一个具有阶乘表示的字符串。
第二个将接收一个具有阶乘表示的字符串并生成十进制表示。
例如-
十进制数463被编码为“341010”,因为-
463 = 3×5! + 4×4! + 1×3! + 0×2! + 1×1! + 0×0!
示例
以下是代码-
const num = 463;
const decimalToFact = (num = 1) => {
const legend = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
let str = '0';
let i = 2;
while(num){
str = legend[num%i] + str;
num = Math.floor(num / i);
i++;
};
return str;
};
const factToDecimal = (str = '') => {
const legend = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
const l = str.length;
return str
.split('')
.reduce((a,e,i) => Number(a) * (l - i) + legend.indexOf(e), 0);
};
const fact = decimalToFact(num);
const dec = factToDecimal(fact);
console.log(fact);
console.log(dec);输出结果以下是控制台输出-
341010 463