【发布时间】:2020-11-17 17:31:27
【问题描述】:
我花了几分钟重新创建公式 nCr = n!/r!(n-r)!查找数组中组合的数量。到目前为止,我已经成功地实现了这个公式,但我正在寻找使用这种公式的替代方法。 这是我的代码:
import java.util.Scanner;
public class Factorial {
public static void main(String[] args) {
System.out.println("Enter Num");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
long f = 1;
for(int i = 1; i <= num; ++i)
{
f *= i;
}
System.out.println("Factorial of " +num +" = " +f);
System.out.println("Enter r");
int r = sc.nextInt();
int bracket = num-r;
int f2 = 1;
int rf = 1;
for(int i = 1; i <= r; ++i)
{
rf *= i;
}
for(int i = 1; i <= bracket; ++i)
{
f2 *= i;
}
long ans = f/(rf*f2) ;
System.out.println(num+"C"+r +" = "+ans);
}
}
【问题讨论】:
-
你不断重复循环乘法:使用方法。
-
西蒙,这是一个好的开始。您会发现通过 n!/(r! (n - r)!) 计算 nCr 在大于 12 时会遇到问题,因为阶乘很快就会变成非常大的数字。另一种方法是写出阶乘并取消常用项,这将允许您处理更大的 n。还需要其他方法才能走得更远。祝你好运,玩得开心,这是个好问题。
-
1.
n!/r!是n!没有第一个r乘法,所以不要除以跳过它们 2。您需要使子结果尽可能小以避免整数溢出,因此您需要在单个循环中执行此操作来自a/b的股息a,b可被相同的值整除... 最简单的方法是测试最低有效位为零。如果它被 2 除(或右移)......如果你想要更好的测试除以几个第一个素数...... 3. 使用无符号变量,这会给你更多的比特......
标签: java math combinations formula factorial