ปัญหา
การเข้ารหัสตัวเลขทศนิยมด้วยแฟกทอเรียลเป็นวิธีการเขียนตัวเลขในระบบฐานที่ขึ้นอยู่กับแฟกทอเรียล มากกว่ายกกำลังของตัวเลข
ในระบบนี้ หลักสุดท้ายจะเป็น 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 ='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); ให้ str ='0'; ให้ i =2; ในขณะที่ (num) { str =ตำนาน [num%i] + str; num =Math.floor(น้ำ / ผม); ผม++; }; return str;};const factToDecimal =(str ='') => { ตำนาน const ='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split (''); const l =str.length; คืนค่า 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);
ผลลัพธ์
ต่อไปนี้เป็นเอาต์พุตคอนโซล -
341010463