diff --git a/src/algorithms/math/factorial/__test__/factorialBigInt.test.js b/src/algorithms/math/factorial/__test__/factorialBigInt.test.js new file mode 100644 index 00000000..c70d7fc6 --- /dev/null +++ b/src/algorithms/math/factorial/__test__/factorialBigInt.test.js @@ -0,0 +1,12 @@ +import factorialBigInt from '../factorialBigInt'; + +describe('factorialBigInt', () => { + it('should calculate factorial', () => { + expect(factorialBigInt(0n)).toBe(1n); + expect(factorialBigInt(1n)).toBe(1n); + expect(factorialBigInt(5n)).toBe(120n); + expect(factorialBigInt(8n)).toBe(40320n); + expect(factorialBigInt(10n)).toBe(3628800n); + expect(factorialBigInt(100n)).toBe(93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000n); + }); +}); diff --git a/src/algorithms/math/factorial/factorialBigInt.js b/src/algorithms/math/factorial/factorialBigInt.js new file mode 100644 index 00000000..afcb6969 --- /dev/null +++ b/src/algorithms/math/factorial/factorialBigInt.js @@ -0,0 +1,13 @@ +/** + * @param {bigint} number + * @return {bigint} + */ + export default function factorialBigInt(number) { + let result = 1n; + + for (let i = 2n; i <= number; i += 1n) { + result *= i; + } + + return result; +}