Originariamente inviato da Lasentinella
L'unico problema è il fatto che ho in input un BigInteger(scusa, mi ero dimenticato di specificarlo), e che quindi devo sottrarre 1 a quello..e non ci riesco
a = a.subtract(BigInteger.ONE);

Ti mancava l'assegnazione. BigInteger è un oggetto immutabile, quindi fare a.subtract(BigInteger.ONE) non modifica lo stato dell'oggetto referenziato da 'a'.

EDIT: per completezza, riporto quello che farei io per calcolare il fattoriale avendo in input un BigInteger:

codice:
public static BigInteger factorial (BigInteger value)
{
    if (value.signum () < 0)
        throw new IllegalArgumentException ("value cannot be negative");

    BigInteger f = BigInteger.ONE;
    
    while (value.compareTo (BigInteger.ONE) > 0)
    {
        f = f.multiply (value);
        value = value.subtract (BigInteger.ONE);
    }
    
    return f;
}