我正在尝试取消 Java 中的阶乘
I am trying to cancel factorials in Java
我正在尝试计算学校项目的 rCombinations 数量,但我似乎无法使用我的方法 return 正确的值。
我和我的教授谈过,他建议取消阶乘中的公因子。这样
35!/32! = 35*34*33.
这是我目前所拥有的。
public static long rCombinations(int n, int r) {
int q = n-r;
long x = 1;
for(int i = r; i <= r; i ++)
{
x = n*(n-i);
}
return x/factorial(r);
}
对于 n!/m!,其中 n >= m
int out = 1;
for(int i = n; i <= m; i++)
out *= i;
对于 n!/m!,其中 n <= m
double out = 1;
for(int i = n; i <= m; i++)
out /= i;
在这两种情况下,out = n!/m!
注意,int还是很容易溢出的,55!/49!太大了
您可以使用此实现来计算没有 BigInteger 的数字的大阶乘,如下所示:
import java.util.Scanner;
public class N_Faktorial {
public static void main(String[] args) {
int u = 1, A[] = new int[9999999];
Scanner scan = new Scanner(System.in);
System.out.print("n=");
int n = scan.nextInt();
A[1] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
A[j] *= i;
}
for (int j = 1; j <= n; j++) {
if (A[j] > 9) {
A[j + 1] += A[j] / 10;
A[j] %= 10;
}
if (A[u + 1] != 0) {
u++;
}
}
}
for (int i = u; i >= 1; i--) {
System.out.print(A[i]);
}
//when n>=24 count of digit of n! is equal to n+1.
System.out.println("\n Result : " + n + " count of digit " + u);
}
}
之后你需要一些除法运算的解决方案。
希望对你有帮助!
我正在尝试计算学校项目的 rCombinations 数量,但我似乎无法使用我的方法 return 正确的值。
我和我的教授谈过,他建议取消阶乘中的公因子。这样
35!/32! = 35*34*33.
这是我目前所拥有的。
public static long rCombinations(int n, int r) {
int q = n-r;
long x = 1;
for(int i = r; i <= r; i ++)
{
x = n*(n-i);
}
return x/factorial(r);
}
对于 n!/m!,其中 n >= m
int out = 1;
for(int i = n; i <= m; i++)
out *= i;
对于 n!/m!,其中 n <= m
double out = 1;
for(int i = n; i <= m; i++)
out /= i;
在这两种情况下,out = n!/m!
注意,int还是很容易溢出的,55!/49!太大了
您可以使用此实现来计算没有 BigInteger 的数字的大阶乘,如下所示:
import java.util.Scanner;
public class N_Faktorial {
public static void main(String[] args) {
int u = 1, A[] = new int[9999999];
Scanner scan = new Scanner(System.in);
System.out.print("n=");
int n = scan.nextInt();
A[1] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
A[j] *= i;
}
for (int j = 1; j <= n; j++) {
if (A[j] > 9) {
A[j + 1] += A[j] / 10;
A[j] %= 10;
}
if (A[u + 1] != 0) {
u++;
}
}
}
for (int i = u; i >= 1; i--) {
System.out.print(A[i]);
}
//when n>=24 count of digit of n! is equal to n+1.
System.out.println("\n Result : " + n + " count of digit " + u);
}
}
之后你需要一些除法运算的解决方案。 希望对你有帮助!