Como calcular fatorial em java

Pessoal, tenho um código que calcula a fatorial de um número, mas tenho tido problemas pois o código não consegue calcular a fatorial de números muito grandes e em alguns casos o fatorial retorna negativo.

Segue o código:

String formula = String.valueOf(jTextField1.getText());
String valores[] = formula.split("!");
int num = Integer.parseInt(valores[1]);
int total = 1;
for(int i = 1;i <= num;i++){
    total *= i;
}
jLabel2.setText(String.valueOf(total));

Agradeço desde já.

Deve ter estourado os 32bits da variável do tipo INT, tente usar um long, bigint,double, etc…

Eu tentei usar todos os tipos que você citou mas ainda estou tendo problemas, o máximo que já consegui calcular foi a fatorial de 65 e eu quero poder calcular a fatorial de qualquer número.

Já tentou com BigDecimal?

Já mas dá erro na parte do laço for.

Eu queria dizer BigInteger… desculpe!

Tente algo do tipo:

btnCalcularFatorial.setOnAction((ActionEvent e)->{
        long valor = 65;
        BigInteger resultado = BigInteger.valueOf(1);
        BigInteger iAtual;
  
       for (long i = 1; i <= valor; i++) {
           iAtual = new BigInteger(String.valueOf(i));
           resultado = resultado.multiply(iAtual);
        }
        System.out.println(resultado);
    });

Acho que calcular fatorial para valores long resolve a maioria dos problemas…
Você precisa calcular para números maiores ainda? Porque fiz uns testes aqui e o fatorial de 160 é:

471472363599206132240694321176194377951192623045460204976904
578317542573467421580346978030238114995699562728104819596262
106947389303901748942909887857509625114880781313585012959529
941660203611234871833992565791817698209861793313332044734813
700096000000000000000000000000000000000000000

Haja número!!! Rs

Deu certo, obrigado!