**A simple program to demonstrate how to do Factorial caching in Java**

package com.hubberspot.example; import java.util.Scanner; public class FactorialCaching { // an array of long values to cache the factorial values public static long[] factorial = new long[21]; // a loop counter that counts till end of number for // which we want to calculate factorial public static int fact = 0; // static initializer block, the block of executes as // soon as the class is loaded into the memory for // the first time. Here it initializes value of first // element of array to be 1 as factorial of 1 is 1 static { factorial[0] = 1; } // method where the logic for factorial // calculations goes. It takes a argument which // is the number passed for which we want to // calculate the factorial public static long factorial(int x) { // fact goes from zero to number-1 for which we want to // calculate the factorial while(fact < x) { // applying formula as 3! = 3 * 2! factorial[fact + 1] = factorial[fact] * (fact + 1); // increment the fact for next value fact++; } // return the result return factorial[x]; } public static void main(String[] args) { // Create a Scanner object to read input from console Scanner scanner = new Scanner(System.in); // prompt the user to enter the number for which factorial // is to be calculated System.out.println("Enter the number for which you " + "want to calculate factorial - "); // prompting the user to enter number between 0 to 20 System.out.println("Note : \"The number should range " + "from 0 to 20\""); // store the number entered into number variable int number = scanner.nextInt(); // For the first time call factorial method to store // values into the array of calculated factorials long result = FactorialCaching.factorial(number); // the result displayed on the console System.out.println("The factorial of "+ number +" : " + result); System.out.println(); System.out.println("Enter the another number for which you " + "want to calculate factorial - "); // prompting the user to enter number between 0 to 20 System.out.println("Note : \"The number should range " + "from 0 to "+number+"\""); // store the number entered into number variable number = scanner.nextInt(); // After first call to factorial method next time // we just access the factorial by accessing the // long array through index System.out.println("The factorial after caching is done : " + FactorialCaching.factorial[number]); } }

**Output of the program :**