Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

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

Vấn đề

Mã hóa số thập phân bằng giai thừa là cách viết số trong hệ cơ số phụ thuộc vào giai thừa, thay vì lũy thừa của số. Trong hệ này, chữ số cuối luôn là 0 (cơ số 0!). Chữ số trước đó là 0 hoặc 1 (cơ số 1!). Chữ số trước nữa là 0, 1, hoặc 2 (cơ số 2!), v.v. Nói chung, chữ số thứ n từ cuối luôn là 0, 1, 2, ..., n và ở cơ số n!.

Cần hai hàm. Hàm thứ nhất nhận số thập phân trả về chuỗi biểu diễn giai thừa. Hàm thứ hai nhận chuỗi giai thừa trả về số thập phân. Ví dụ: 463 được mã hóa thành "341010" vì 463 = 3×5! + 4×4! + 1×3! + 0×2! + 1×1! + 0×0!.

Ví dụ

Dưới đây là mã nguồn:

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

Kết quả

Kết quả đầu ra trong console:

341010 463