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;
}