我对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/