java计算m选n的组合C(n,m).计算公式是:m!/n!(m-n)其中n!=123*...n,m!=123...*m 要求能捕获输人的数字格式异常(NumberFormatException),输入数据不是正整数时则报“输入数据格式不对,请重新输入”。
import java.util.Scanner;
public class CombinationCalculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
try {
System.out.print("请输入m的值:");
int m = Integer.parseInt(scanner.nextLine());
System.out.print("请输入n的值:");
int n = Integer.parseInt(scanner.nextLine());
if (m < 0 || n < 0 || m < n) {
System.out.println("m和n必须为非负整数且m要大于等于n");
return;
}
int numerator = factorial(m);
int denominator = factorial(n) * factorial(m - n);
int result = numerator / denominator;
System.out.println("C(" + n + "," + m + ") = " + result);
} catch (NumberFormatException e) {
System.out.println("输入数据格式不对,请重新输入");
}
}
private static int factorial(int n) {
if (n == 0) {
return 1;
}
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
}
可参考以下程序,考虑了m==n的情况:
import java.util.Scanner;
/**
* 计算m选n的组合C(n,m)
* 计算公式是:m!/n!(m-n)
*/
public class Combination {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = 0, n = 0;
try {
System.out.println("请输入m的值:");
m = sc.nextInt();
System.out.println("请输入n的值:");
n = sc.nextInt();
} catch (Exception e) {
System.out.println("输入数据格式不对,请重新输入");
return;
}
if (m < 0 || n < 0 || m < n) {
System.out.println("m和n不能小于0,且m的值不能小于n的值");
} else {
int result = factorial(m) / (factorial(n) * (m > n ? (m - n) : 1));
System.out.println("m选n的组合C(" + m + "," + n + ")=" + result);
}
}
private static int factorial(int n) {
if (n <= 1) {
return 1;
}
int result = 2;
for (int i = 3; i <= n; i++) {
result *= i;
}
return result;
}
}