import java.math.BigInteger; public class FactorialDigitSum { private static final int ZERO = 0; private static final int ONE = 1; private static final BigInteger TEN = bigInteger(10); public static BigInteger factorialOf(int number) { if (number == ZERO) { return BigInteger.ONE; } return bigInteger(number).multiply(factorialOf(number - ONE)); } public static BigInteger sumOfDigits(BigInteger number) { if (number.compareTo(TEN) < ZERO) { return number; } return sumOfDigits(number.divide(TEN)).add(number.mod(TEN)); } protected static BigInteger bigInteger(int number) { return bigInteger(String.valueOf(number)); } protected static BigInteger bigInteger(String stringValue) { return new BigInteger(stringValue); } public static BigInteger sumOfFactorialDigits(int number) { return sumOfDigits(factorialOf(number)); } }