Calculo de combinaçao numerica

Bom dia!

É o seguinte galera, eu estou iniciando em java e gostaria de fazer um programa que calcule a combinaçao numerica de 2 numeros, a fórmula para isso é:
C= n!/r!*(n-r)! traduçao: Combinaçao é igual a fatorial de n dividido pelo fatorial de r ,vezes o n menos r fatorial
eu dei uma pesquisada na internet e em alguns foruns aqui, e depois de muito quebrar a cabeça eu consegui parcialmente resolver o problema
acontece q quando eu digito um valor muito alto como n=50 e r=5 o programa me retorna sempre o numero 1
se alguem pudes da uma ajuda eu agradeco. estou usando o netbeans 6.8, segue o código.

[code]package combinacao;
import javax.swing.JOptionPane;

public class Main { private static String alertmessage;

public static void main(String[] args) {
    
    int  n_r ,r, n, i;
    long comb, fat_nr, fat_n, fat_r;
    
    n = (int) Long.parseLong(JOptionPane.showInputDialog ("digite valor de N"));
   fat_n = 1;
    for (i = 1; i<= n; i++){
          fat_n = fat_n * i;
    }
         

    r = (int) Long.parseLong(JOptionPane.showInputDialog("digite o valor de R"));
    fat_r = 1;
    for(i =1; i<= r; i++){
        fat_r = fat_r * i;
    }

    n_r = n-r;
    fat_nr = 1;

    for (i = 1; i<=n_r; i++){
        fat_nr = fat_nr * i;
    }

    comb = fat_n/(fat_r * fat_nr);

   

   JOptionPane.showMessageDialog(null, "A combinaçao numerica de N,R é:" + "\n" + comb  );

    
}

}[/code]

so funciona com numeros de 1 a 20 ± lembrando que n deve ser sempre maior que r “esqueci de colocar essa parte no codigo”.

Primeiro de tudo, escreva um método de calcule o fatorial, depois utilize esse método na fórmula da combinação.
Um problema que você vai encontrar (para números grandes) é que mesmo o tipo long vai ser pouco preciso para calcular o fatorial.
O certo seria simplificar a fórmula primeiro, mas isso vai dar mais problemas.

Sugiro então que primeiramente você escreva o método do fatorial, e então um método para a combinação.
Veja o que consegue fazer e poste aqui novamente.

[]´s

Obrigado por responder!

Eu estou no trabalho quando chegar em casa vou tentar fazer isso e posto aqui novamente,
se alguem tiver mais alguma sugestao eu agradeco.