#include <stdio.h>
// 计算阶乘的函数
unsigned long long factorial(int n) {
if (n == 0 || n == 1) {
return 1;
}
unsigned long long result = 1;
for (int i = 2; i <= n; i++) {
result *= i;
}
return result;
}
// 计算组合数 C(n, m)
unsigned long long combination(int n, int m) {
if (m > n) {
return 0;
}
return factorial(n) / (factorial(m) * factorial(n - m));
}
// 计算排列数 A(n, m)
unsigned long long permutation(int n, int m) {
if (m > n) {
return 0;
}
return factorial(n) / factorial(n - m);
}
int main() {
int n, m;
// 提示用户输入两个整数
printf("请输入两个整数 n 和 m: ");
scanf("%d %d", &n, &m);
// 计算组合数和排列数
unsigned long long cnm = combination(n, m);
unsigned long long anm = permutation(n, m);
// 输出结果
printf("C(%d, %d) = %llu\n", n, m, cnm);
printf("A(%d, %d) = %llu\n", n, m, anm);
return 0;
}
代码解释:
-
函数
factorial
:- 计算一个整数的阶乘。
- 使用
unsigned long long
类型来处理较大的数值。
-
函数
combination
:- 计算组合数 ( C_n^m )。
- 公式:( C_n^m = \frac{n!}{m! \cdot (n - m)!} )。
- 如果
m
大于n
,返回0。
-
函数
permutation
:- 计算排列数 ( A_n^m )。
- 公式:( A_n^m = \frac{n!}{(n - m)!} )。
- 如果
m
大于n
,返回0。
-
主函数
main
:- 提示用户输入两个整数
n
和m
。 - 调用
combination
函数计算组合数 ( C_n^m )。 - 调用
permutation
函数计算排列数 ( A_n^m )。 - 输出组合数和排列数。
- 提示用户输入两个整数