    // Как же странно работать с этим BigInteger, вместо плюсов/минусов здесь 
    // какие-то шайтан методы аля .subtract.
    static BigInteger factorial(BigInteger n)
    {
        if (!n.equals(BigInteger.ZERO))
        {
            return n.multiply(factorial(n.subtract(BigInteger.ONE)));
        }
        else
        {
            return BigInteger.ONE;
        }
    }