# Java Program to Find Factorial of a Large Number

## Factorial of a Large Number in Java

Today we will discuss the program to find the Factorial of a Large Number in Java. Factorial of a number means multiply of all below number with each other till 1. If user enter 0 or 1 , then factorial of both numbers will be 1 only.

Or If the user enters negative numbers then its factorial is not defined.
Example – 5! = 5*4*3*2*1 = 120 ## Method 1 :

•  Initialize carry as 0.
• Do following for i = 0 to res_size – 1
•  Find value of res[i] * x + carry. Let this value be prod
•  Update res[i] by storing last digit of prod in it.
•  Update carry by storing remaining digits in carry.
• Put all digits of carry in res[] and increase res_size by number of digits in carry. Run
```public class Main
{
static void factorial(int n)
{
int res[] = new int;

// Initialize result
res = 1;
int res_size = 1;

// Apply simple factorial formula
// n! = 1 * 2 * 3 * 4...*n
for (int x = 2; x <= n; x++)
res_size = multiply(x, res, res_size);

System.out.println("Factorial of given number is ");
for (int i = res_size - 1; i >= 0; i--)
System.out.print(res[i]);
}
static int multiply(int x, int res[], int res_size)
{
int carry = 0; // Initialize carry

// One by one multiply n with individual
// digits of res[]
for (int i = 0; i < res_size; i++)
{
int prod = res[i] * x + carry;
res[i] = prod % 10; // Store last digit of
// 'prod' in res[]
carry = prod/10; // Put rest in carry
}

// Put carry in res and increase result size
while (carry!=0)
{
res[res_size] = carry % 10;
carry = carry / 10;
res_size++;
}
return res_size;
}

// Driver program
public static void main(String args[])
{
factorial(10);
}
}```

### Output :

```Factorial of given number is 3628800
```

## Method 2 :

Big Integer can also be used to calculate factorial of large numbers.

Run
```import java.math.*;
import java.util.*;

class Main {
public
static void main(String[] args) {
Scanner input = new Scanner(System.in);
long n = input.nextLong();
System.out.println(fact(n));
}
public
static BigInteger fact(long n) {
BigInteger result = BigInteger.ONE;
for (int i = 1; i <= n; i++)
result = result.multiply(BigInteger.valueOf(i));
return result;
}
}
```

### Output :

```221124000727777607680000
```