我对java还比较陌生,但我当然想做得更好。我不能解决一个看起来很简单的问题,但这里是:写一个计算n的程序!/k(factorial),取n和k作为用户输入,检查n>k>0,否则打印错误。
这是我目前所拥有的。我知道我还没有把问题的错误部分解决,但我现在想让它发挥作用计算一个阶乘是相当直接的,但分开这两个似乎是一个挑战。任何帮助都将不胜感激提前谢谢!

import java.util.Scanner;

public class nkFactorial {

    @SuppressWarnings({ "resource" })
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter n");
        int n = input.nextInt();
        System.out.println("Enter k");
        int k = input.nextInt();

        long nfactorial=1;
        long kfactorial=1;

        do {
            nfactorial *=n;
            n--;
            kfactorial *=k;
            k--;
        } while (n>k && k>1);
        System.out.println("n!/k!=" + nfactorial/kfactorial );
    }
}

最佳答案

你的出口条件while (n>k && k>1);和你乘以n和k都是错误的,因为它们导致你计算n^ k/k^ k。
这样的做法应该管用:

int kfactorial = 1;
int nfactorial = 1;
if (n>k && k>0) {
    int i = 1;
    while (i<=k) {
        nfactorial *=i;
        kfactorial *=i;
        i++;
    }
    while (i<=n) {
        nfactorial *=i;
        i++;
    }
    System.out.println("n!/k!=" + nfactorial/kfactorial );
}

当然,如果你还记得n!/k!=(k+1)*(k+2)*...*n,这会更有效率:
int result = 1;
if (n>k && k>0) {
    int i = k+1;
    while (i<=n) {
        result *=i;
        i++;
    }
    System.out.println("n!/k!=" + result );
}

关于java - 除以两个阶乘,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24970913/

10-11 21:51