java语言编程m!/n!*(m-n)!。求代码
发布网友
发布时间:2023-01-04 23:40
我来回答
共3个回答
热心网友
时间:2023-10-14 08:38
import java.util.Scanner;
import org.junit.Test;
public class NumberTest {
@Test
public void test() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入m的值:");
int m = scanner.nextInt();
System.out.println("请输入n的值:");
int n = scanner.nextInt();
scanner.close();
double sum = 0;
if ((m - n) !=0) {
sum = getfactorial(m)*1.00/(getfactorial(n) * getfactorial(m -n));
System.out.println(sum);
} else {
System.out.println("m-n等于0,无法计算!");
}
}
public int getfactorial(int value) {
if(value < 1){
return 1;
}else if (value == 1) {
return value;
} else {
return value * (getfactorial(value - 1));
}
}
}
追问我刚学到for循环,可以用循环写一下吗?
追答
哦,知道了,你用这个试试
import java.util.Scanner;
public class NumberTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入m的值:");
int m = scanner.nextInt();
System.out.println("请输入n的值:");
int n = scanner.nextInt();
scanner.close();
double sum = 0;
int msum = 1, nsum = 1;
if (m - n == 0) {
System.out.println("m-n等于0,无法计算!");
} else {
if (m <= 1) {
msum = 1;
} else {
for (int i = 1; i < m; i++) {
msum = msum * i;
}
} // 求m!阶乘
if (n <= 1) {
nsum = 1;
} else {
for (int i = 1; i < m; i++) {
nsum = nsum * i;
}
} // 求n!的阶乘
int mnsum=1;
if (m - n <= 1) {
mnsum = 1;
} else{
for (int i = 1; i < (m-n); i++) {
mnsum = nsum * i;
}
} // 求(m-n)!的阶乘
sum = msum * 1.00 / (nsum * mnsum);
System.out.println("该值为:" + sum);
}
}
}
热心网友
时间:2023-10-14 08:38
上面的答案都是对的,但都有一个问题,就是n稍大(比如64)的时候n!就已经溢出了。
一般来说,正常应用场景下的Cnm用杨辉三角来求。对于特别大的数,还有另外一些数学上的方法。
热心网友
时间:2023-10-14 08:39
public class t1 {
public static void main(String[] args) {
int m=6;
int n=5;
System.out.println(thh(m)/thh(n)*thh(m-n));
}
static int thh(int s){
int k=1;
for(int i=s;i>0;i--){
k=k*i;
}
return k;
}
}