Originariamente inviato da John360
come da titolo vorrei sapere che tipo di dato posso utilizzare, dal momento che l'int è un po stretto, per poter calcolare il fattoriale di numeri grandi: ad esempio 30 o 40 perchè a 40 anche il long restituisce valori sfalsati, mentre se uso il double poi mi ritorna un valore in virgola, che anche se esatto non mi piace XD
come faccio?
Il int (32 bit) ti è già stato detto che arriva a max 2147483647. Il long (64 bit) a max 9223372036854775807.
I valori "primitivi" interi di Java sono questi e appunto sono limitati per i fattoriali che vuoi calcolare tu.

Ti serve la classe java.math.BigInteger. Non ha un limite preimpostato, nel senso che è una classe per gestire interi a precisione "arbitraria". Potresti gestire numeri di 1000 bit, 5000 bit, ecc...
Chiaramente questo ha comunque un costo sia dal punto di vista della occupazione di memoria, sia per il tempo computazionale.

Un oggetto BigInteger è "immutabile" (come java.lang.Integer e gli altri wrapper). Le operazioni non le fai con gli operatori classici + - * / ma con dei metodi che invochi sul BigInteger.

Es.:
codice:
BigInteger biA = BigInteger.valueOf(10000);
BigInteger biB = BigInteger.valueOf(3);

BigInteger biRis = biA.multiply(biB);

System.out.println(biRis);   // stampa 30000
Vedi documentazione javadoc, che dovresti sempre tenere a portata di ... mouse.