求助 组合数求解的算法
整数计算,求结果----避免溢出的同时,不利用BigInteger,的算法
例如:
C(100,50) = 100891344545564193334812497256
谢谢.
[ 本帖最后由 cool1122 于 2010-5-27 06:31 编辑 ]
----------------解决方案--------------------------------------------------------
import javax.swing.JOptionPane;
public class Digui {
public static void main(String[] args) {
String output = "", number, number1;
int n = 0, m = 0;
long k = 0;
number = JOptionPane.showInputDialog("请输入m的值!");
number1 = JOptionPane.showInputDialog("请输入n的值!");
m = Integer.parseInt(number);
n = Integer.parseInt(number1);
k = jie(m) / (jie(m - n) * jie(n));
output = "C(m,n)的组合为:" + k;
JOptionPane.showMessageDialog(null, output);
}
public static int jie(int n) {
if (n == 1 || n == 0)
return 1;
else
return n * jie(n - 1);
}
}
----------------解决方案--------------------------------------------------------
以下是引用myhnuhai在2010-5-30 19:43:03的发言:
import javax.swing.JOptionPane;
public class Digui {
public static void main(String[] args) {
String output = "", number, number1;
int n = 0, m = 0;
long k = 0;
number = JOptionPane.showInputDialog("请输入m的值!");
number1 = JOptionPane.showInputDialog("请输入n的值!");
m = Integer.parseInt(number);
n = Integer.parseInt(number1);
k = jie(m) / (jie(m - n) * jie(n));
output = "C(m,n)的组合为:" + k;
JOptionPane.showMessageDialog(null, output);
}
public static int jie(int n) {
if (n == 1 || n == 0)
return 1;
else
return n * jie(n - 1);
}
}
溢出问题:import javax.swing.JOptionPane;
public class Digui {
public static void main(String[] args) {
String output = "", number, number1;
int n = 0, m = 0;
long k = 0;
number = JOptionPane.showInputDialog("请输入m的值!");
number1 = JOptionPane.showInputDialog("请输入n的值!");
m = Integer.parseInt(number);
n = Integer.parseInt(number1);
k = jie(m) / (jie(m - n) * jie(n));
output = "C(m,n)的组合为:" + k;
JOptionPane.showMessageDialog(null, output);
}
public static int jie(int n) {
if (n == 1 || n == 0)
return 1;
else
return n * jie(n - 1);
}
}
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Digui.main(Digui.java:13)
----------------解决方案--------------------------------------------------------
那个数太大了,double也太小了!阁下能有更好的办法吗?
----------------解决方案--------------------------------------------------------
这道题其实主要就是大数运算,百度一下答案多的是。
在本版中lampeter123提供的算法里面也有介绍的
----------------解决方案--------------------------------------------------------