Computer >> Máy Tính >  >> Lập trình >> Javascript

Mã hóa thập phân thành giai thừa và ngược lại trong JavaScript

Vấn đề

Mã hóa số thập phân với thừa số là một cách viết ra các số trong hệ cơ số phụ thuộc vào các nguyên tố, chứ không phải lũy thừa của các số.

Trong hệ thống này, chữ số cuối cùng luôn là 0 và ở cơ số 0 !. Chữ số trước đó là 0 hoặc 1 và ở cơ số 1 !. Chữ số trước đó là 0, 1 hoặc 2 và ở trong cơ số 2!, V.v ... Nói chung, chữ số thứ n đến cuối cùng luôn là 0, 1, 2, ..., n và nằm trong cơ số n! .

Chúng ta sẽ cần hai chức năng. Đầu tiên sẽ nhận một số thập phân và trả về một chuỗi có biểu diễn giai thừa.

Cái thứ hai sẽ nhận một chuỗi có biểu diễn giai thừa và tạo ra biểu diễn thập phân.

Ví dụ -

Số thập phân 463 được mã hóa là "341010", bởi vì -

463 = 3×5! + 4×4! + 1×3! + 0×2! + 1×1! + 0×0!

Ví dụ

Sau đây là mã -

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);

Đầu ra

Sau đây là đầu ra của bảng điều khiển -

341010
463