diff --git a/math/catalan.c b/math/catalan.c index 2116f5cb68..1539275acf 100644 --- a/math/catalan.c +++ b/math/catalan.c @@ -6,6 +6,8 @@ long int factorial(int x) // long int for more than 10 factorial { int i; long int fac; // fac stores x factorial + if (x == 0) + return 1; // 0! = 1: without this factorial(0) = 0 and the formula divides by zero fac = x; for (i = 1; i < x; i++) // loop to calculate x factorial { @@ -19,6 +21,11 @@ int main() int n; float C; // C is catalan number for n; scanf("%d", &n); + if (n < 0 || n > 10) + { + printf("n must be in [0, 10]: (2n)! overflows long int beyond that\n"); + return 1; + } f1 = factorial(2 * n); f2 = factorial(n + 1); f3 = factorial(n);