java计算m选n的组合C(n,m)

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;
    }
}