編碼 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 檢視

開啟您的職業生涯

完成課程,獲得認證

開始
廣告
© . All rights reserved.