编码 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
广告