# Java Program to Find Factorial of a Number

In this post, we will develop the Factorial program in Java. We will see what are the different ways to find the factorial of a number in Java.

In mathematics, the factorial of a positive integer n, denoted by n!, is the product of all positive integers less than or equal to n. For example:- The factorial of 4= 4! = 4*3*2*1 or 1*2*3*4 = 24

``````Factorial (n) =
1 * 2 * ... * (n-1) * n
Or,
n * (n-1) * ... * 2 * 1``````

The factorial of a negative number doesn’t exist. The value of 0! is 1, according to the convention for an empty product.

Procedure to find the factorial of a number in Java,

1) Take a number
2) Declare a temporary variable `fact` and initialize it with 1. `long fact = 1;`
3) Take an iterator variable `i`, starting from 1
4) Multiply fact variable and iterator variable. Store the result into fact variable. `fact = fact * i;`
5) Increase the iterator variable by 1.
6) Repeat 4 and 5 steps until the iterator variable is less than the given number.

``````import java.util.Scanner;
public class Factorial {

public static long findFactorial(int number){

// declare variable
long fact = 1;

for(int i=1; i<=number; i++) {
fact = fact * i;
}

return fact;
}

public static void main(String[] args) {

// declare variables
int number = 0;
long result = 0;

//create Scanner class object
// to take input
Scanner scan = new Scanner(System.in);

// take input from end-user
System.out.print("Enter integer number:");
number = scan.nextInt();

// Find the factorial of
// the given number
result = findFactorial(number);

// display result
System.out.println("Factorial = "+ result);

// close Scanner class object
scan.close();
}
}``````

The output for different test-cases:-

Enter an integer number:: 5
Factorial = 120

Enter an integer number:: 4
Factorial = 24

It was a basic Java program to calculate factorial of a given number, which calls findFactorial() method to calculate the factorial value. The findFactorial method uses for loop and increment operator.

The for loop calculates the factorial of number 5 as = 1*2*3*4*5 because it uses increment operator. In place of increment operator, we can also use decrement operator, then it will calculate the factorial value as 5! = 5*4*3*2*1

The factorial method in Java using for loop and decrement operator,

``````public static long findFactorial(int number) {
// declare variable
long fact = 1;
for(int i=number; i>1; i--) {
fact = fact * i;
}
return fact;
}``````

## Factorial for Large Values

The store the factorial value instead of int data type we are using a variable of long data type because the factorial value will be a larger number. But for a large number (like 50, 100) long data type is also not enough to store those values. So, we need to use a variable of BigInteger type which is defined in java.math package (not java.lang.Math class).

To multiply we can’t use the multiplication (*) operator because it is an object of BigInteger class so, we should use multiply methods of BigInteger class.

``````import java.math.BigInteger;
import java.util.Scanner;
public class Factorial {

public static BigInteger findFactorial(int number){

// declare variable
BigInteger fact = BigInteger.ONE;

for(int i=1; i<=number; i++) {
fact = fact.multiply(BigInteger.valueOf(i));
}
return fact;
}

public static void main(String[] args) {

// declare variables
int number = 0;

//create Scanner class object
// to take input
Scanner scan = new Scanner(System.in);

// take input from end-user
System.out.print("Enter integer number:");
number = scan.nextInt();

// display result
System.out.println("Factorial = "+
findFactorial(number));

// close Scanner class object
scan.close();
}
}``````

Output:-

Enter an integer number:: 50
Factorial = `30414093201713378043612608166064768844377641568960512000000000000`

## Factorial Program in Java using While loop

``````import java.util.Scanner;
public class Factorial {

public static long findFactorial(int number) {
// declare variable
long fact = 1;
int i = 1;

while(i<=number) {
fact = fact * i;
i++;
}
return fact;
}

public static void main(String[] args) {

// declare variables
int number = 0;
long result = 0;

//create Scanner class object
Scanner scan = new Scanner(System.in);
// take input from end-user
System.out.print("Enter integer number:");
number = scan.nextInt();

// Find factorial
result = findFactorial(number);

// display result
System.out.println("Factorial = "+ result);

// close Scanner class object
scan.close();
}
}``````

This program calls `findFactorial()` method which is developed by using a while loop and increment operator. It calculates the factorial value as 5! = 1*2*3*4*5

Similar to the previous case, we can also use the decrement operator to calculate the factorial value. It will calculate the factorial value as 5! = 5*4*3*2*1

Java method to find factorial using while loop and decrement operator,

``````public static long findFactorial(int number) {
// declare variable
long fact = 1;
int i = number;
// loop to repeat the process
while(i>1) {
fact = fact * i;
i--;
}
return fact;
}``````

Now we will see the recursive method to find the factorial value.

## Java Factorial Method

Java factorial method using recursion technique

Formula,

``n! = n * (n-1)!``

The base case for finding factorial

``````factorial(0) = 1;
Or,
factorial(1) = 1;``````

General case for finding factorial

``factorial(n) = n * factorial(n-1);``

Java code for factorial using recursion method and if-else statement,

``````// recursive Java method to
// find factorial of a number
// using if-else statement
public static long findFactorial(int number) {
if(number == 0) return 1;
else
return number*findFactorial(number-1);
}``````

Java code for factorial using recusion method and ternary operator,

This method can find factorial of a given number in a single line.

``````// recursive Java method to
// find factorial of a number
// using ternary operator
public static long findFactorial(int n) {
return (n==0) ? 1 : n*findFactorial(n-1);
}``````

If you enjoyed this post, share it with your friends. Do you want to share more information about the topic discussed above or you find anything incorrect? Let us know in the comments. Thank you!