From 1ddd661b3771146c669faa6ab866af9478c3906d Mon Sep 17 00:00:00 2001 From: Vansh Sharma Date: Wed, 1 Apr 2026 15:24:19 +0530 Subject: [PATCH 1/7] Use BigInteger to prevent overflow in factorial calculation --- src/main/java/com/thealgorithms/maths/Factorial.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/thealgorithms/maths/Factorial.java b/src/main/java/com/thealgorithms/maths/Factorial.java index 511cc1f84f05..c9794da11992 100644 --- a/src/main/java/com/thealgorithms/maths/Factorial.java +++ b/src/main/java/com/thealgorithms/maths/Factorial.java @@ -1,5 +1,7 @@ package com.thealgorithms.maths; +import java.math.BigInteger; + public final class Factorial { private Factorial() { } @@ -10,13 +12,13 @@ private Factorial() { * @param n the number * @return the factorial of {@code n} */ - public static long factorial(int n) { + public static BigInteger factorial(int n) { if (n < 0) { throw new IllegalArgumentException("Input number cannot be negative"); } - long factorial = 1; + BigInteger factorial = BigInteger.ONE; for (int i = 1; i <= n; ++i) { - factorial *= i; + factorial = factorial.multiply(BigInteger.valueOf(i)); } return factorial; } From e1869ec47b179679b95062aa75e0df12b7bf2784 Mon Sep 17 00:00:00 2001 From: Vansh Sharma Date: Wed, 1 Apr 2026 15:35:29 +0530 Subject: [PATCH 2/7] chore: remove unnecessary comment --- src/main/java/com/thealgorithms/maths/Factorial.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/thealgorithms/maths/Factorial.java b/src/main/java/com/thealgorithms/maths/Factorial.java index c9794da11992..676a3bca979b 100644 --- a/src/main/java/com/thealgorithms/maths/Factorial.java +++ b/src/main/java/com/thealgorithms/maths/Factorial.java @@ -23,3 +23,4 @@ public static BigInteger factorial(int n) { return factorial; } } +// now can canculate the factorial of large numbers without worrying about overflow, as BigInteger can handle arbitrarily large integers. \ No newline at end of file From f312cdb933621332367d66980d00798e33da0ed2 Mon Sep 17 00:00:00 2001 From: Vansh Sharma Date: Wed, 1 Apr 2026 15:38:15 +0530 Subject: [PATCH 3/7] update --- src/main/java/com/thealgorithms/maths/Factorial.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/thealgorithms/maths/Factorial.java b/src/main/java/com/thealgorithms/maths/Factorial.java index 676a3bca979b..fc4cec84b2e2 100644 --- a/src/main/java/com/thealgorithms/maths/Factorial.java +++ b/src/main/java/com/thealgorithms/maths/Factorial.java @@ -22,5 +22,4 @@ public static BigInteger factorial(int n) { } return factorial; } -} -// now can canculate the factorial of large numbers without worrying about overflow, as BigInteger can handle arbitrarily large integers. \ No newline at end of file +} \ No newline at end of file From ced4cfb635309c556ed8f9c71abf467e63bffb43 Mon Sep 17 00:00:00 2001 From: Vansh Sharma Date: Wed, 1 Apr 2026 16:14:56 +0530 Subject: [PATCH 4/7] Fix: improve factorial implementation and formatting --- src/main/java/com/thealgorithms/maths/Factorial.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/thealgorithms/maths/Factorial.java b/src/main/java/com/thealgorithms/maths/Factorial.java index fc4cec84b2e2..3899000fa007 100644 --- a/src/main/java/com/thealgorithms/maths/Factorial.java +++ b/src/main/java/com/thealgorithms/maths/Factorial.java @@ -16,10 +16,10 @@ public static BigInteger factorial(int n) { if (n < 0) { throw new IllegalArgumentException("Input number cannot be negative"); } - BigInteger factorial = BigInteger.ONE; - for (int i = 1; i <= n; ++i) { - factorial = factorial.multiply(BigInteger.valueOf(i)); + BigInteger result = BigInteger.ONE; + for (int i = 1; i <= n; i++) { + result = result.multiply(BigInteger.valueOf(i)); } - return factorial; + return result; } } \ No newline at end of file From 41789a3328a757ed651e7f2667c9e6bb4a6e69b6 Mon Sep 17 00:00:00 2001 From: Vansh Sharma Date: Wed, 1 Apr 2026 16:37:03 +0530 Subject: [PATCH 5/7] test: final fix for FactorialTest logic and formatting --- .../java/com/thealgorithms/maths/FactorialTest.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/thealgorithms/maths/FactorialTest.java b/src/test/java/com/thealgorithms/maths/FactorialTest.java index 3ff7097b8113..e26c2e2932ac 100644 --- a/src/test/java/com/thealgorithms/maths/FactorialTest.java +++ b/src/test/java/com/thealgorithms/maths/FactorialTest.java @@ -3,6 +3,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; +import java.math.BigInteger; + import org.junit.jupiter.api.Test; public class FactorialTest { @@ -16,9 +18,9 @@ public void testWhenInvalidInoutProvidedShouldThrowException() { @Test public void testCorrectFactorialCalculation() { - assertEquals(1, Factorial.factorial(0)); - assertEquals(1, Factorial.factorial(1)); - assertEquals(120, Factorial.factorial(5)); - assertEquals(3628800, Factorial.factorial(10)); + assertEquals(BigInteger.ONE, Factorial.factorial(0)); + assertEquals(BigInteger.ONE, Factorial.factorial(1)); + assertEquals(BigInteger.valueOf(120), Factorial.factorial(5)); + assertEquals(BigInteger.valueOf(3628800), Factorial.factorial(10)); } } From 1b31a2f1e3b6a41fd5270b97685753dc0012d66f Mon Sep 17 00:00:00 2001 From: Vansh Sharma Date: Wed, 1 Apr 2026 16:57:25 +0530 Subject: [PATCH 6/7] chore: final formatting and test fix for BigInteger --- src/main/java/com/thealgorithms/maths/Factorial.java | 8 +------- src/test/java/com/thealgorithms/maths/FactorialTest.java | 2 -- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/src/main/java/com/thealgorithms/maths/Factorial.java b/src/main/java/com/thealgorithms/maths/Factorial.java index 3899000fa007..8ad219a3066c 100644 --- a/src/main/java/com/thealgorithms/maths/Factorial.java +++ b/src/main/java/com/thealgorithms/maths/Factorial.java @@ -6,12 +6,6 @@ public final class Factorial { private Factorial() { } - /** - * Calculate factorial N using iteration - * - * @param n the number - * @return the factorial of {@code n} - */ public static BigInteger factorial(int n) { if (n < 0) { throw new IllegalArgumentException("Input number cannot be negative"); @@ -22,4 +16,4 @@ public static BigInteger factorial(int n) { } return result; } -} \ No newline at end of file +} diff --git a/src/test/java/com/thealgorithms/maths/FactorialTest.java b/src/test/java/com/thealgorithms/maths/FactorialTest.java index e26c2e2932ac..d57365b2095e 100644 --- a/src/test/java/com/thealgorithms/maths/FactorialTest.java +++ b/src/test/java/com/thealgorithms/maths/FactorialTest.java @@ -2,9 +2,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; - import java.math.BigInteger; - import org.junit.jupiter.api.Test; public class FactorialTest { From 5609777dd664102b21cf5fb1f489eebd76896eac Mon Sep 17 00:00:00 2001 From: Vansh Sharma Date: Wed, 1 Apr 2026 17:04:42 +0530 Subject: [PATCH 7/7] chore: final formatting and test fix for BigInteger --- src/test/java/com/thealgorithms/maths/FactorialTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/com/thealgorithms/maths/FactorialTest.java b/src/test/java/com/thealgorithms/maths/FactorialTest.java index d57365b2095e..a393136696e1 100644 --- a/src/test/java/com/thealgorithms/maths/FactorialTest.java +++ b/src/test/java/com/thealgorithms/maths/FactorialTest.java @@ -2,6 +2,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; + import java.math.BigInteger; import org.junit.jupiter.api.Test;