写一个函数求一个数的阶乘,进一步写个函数求2个数组合数(需要调试)用c++
时间: 2024-09-18 12:08:29 浏览: 80
首先,让我们编写一个计算阶乘的函数。阶乘是一个正整数n的所有小于及等于它的正整数的积。例如,5的阶乘(记作5!)就是5 * 4 * 3 * 2 * 1。
```cpp
#include <iostream>
unsigned long long factorial(int n) {
if (n == 0 || n == 1) {
return 1; // 阶乘的基本情况,0和1的阶乘都是1
} else {
return n * factorial(n - 1); // 递归调用,计算n-1的阶乘然后乘以n
}
}
int main() {
int num;
std::cout << "Enter a number: ";
std::cin >> num;
std::cout << "Factorial of " << num << " is: " << factorial(num) << std::endl;
return 0;
}
```
接下来,我们编写一个函数来计算两个数组的组合数。组合数(也称二项式系数)是指从n个不同元素中取出k个元素的组合数目,公式为 C(n, k) = n! / [k!(n-k)!],其中!表示阶乘。
```cpp
#include <vector>
unsigned long long combinations(int n, int k) {
unsigned long long result = factorial(n) / (factorial(k) * factorial(n - k));
return result;
}
int main() {
std::vector<int> arr1 {1, 2, 3};
std::vector<int> arr2 {4, 5};
int n1 = arr1.size();
int k1;
std::cout << "Enter the first array size and index for combination: ";
std::cin >> n1 >> k1;
int n2 = arr2.size();
int k2;
std::cout << "Enter the second array size and index for combination: ";
std::cin >> n2 >> k2;
unsigned long long comb1 = combinations(n1, k1);
std::cout << "Combination of arr1 with size " << n1 << " and index " << k1 << ": " << comb1 << std::endl;
unsigned long long comb2 = combinations(n2, k2);
std::cout << "Combination of arr2 with size " << n2 << " and index " << k2 << ": " << comb2 << std::endl;
return 0;
}
```
这个组合数函数使用前面的阶乘函数,注意,由于阶乘值增长非常快,当n和k较大时可能会导致溢出。因此,在实际应用中,可以考虑使用高精度数学库,如`boost::multiprecision`,来处理这种情况。
阅读全文
相关推荐


















