package com.interview.number; /** * Date 03/14/2015 * @author tusroy * Find factorial of very large number like 100. * * Solution * Since result will be very large it cannot fit in long. We need to store result in array * and do regular multiplication of result in array with next number of factorial. * Result is randomly initialized with size 500. Better would be to use list which grows * dynamically. * * Test cases: * Negative number - should throw exception for negative number * 0 * large number * * Reference * http://www.geeksforgeeks.org/factorial-large-number/ */ public class FactorialOfLargeNumber { public int calculate(int result[], int n){ assert n >= 0; result[0] = 1; int size = 1; for(int i=2; i <= n; i++){ size = multiply(result, i, size); } return size; } private int multiply(int result[], int x, int size){ int carry = 0; int prod = 0; int i=0; for(; i < size; i++){ prod = result[i]*x + carry; result[i] = prod%10; carry = prod/10; } while(carry != 0){ result[i] = carry%10; carry = carry/10; i++; } return i; } public static void main(String args[]){ FactorialOfLargeNumber fol = new FactorialOfLargeNumber(); int result[] = new int[500]; int size = fol.calculate(result, 126); for(int i=size-1; i >=0; i--){ System.out.print(result[i]); } } }