Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

การเข้ารหัสทศนิยมเป็นแฟกทอเรียลและย้อนกลับใน 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 ='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