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

更新日期:19-4-2021

260 视图

开启您的职业生涯

完成课程,获得认证

开始
广告