计算组合数C(n,m)。 从 n 个不同元素中每次取出 m 个不同元素 ,不管其顺序合成一组,称为从 n 个元素中不重复地选取 m 个元素的一个组合。所有这样的组合的种数称为组合数。 如果你的程序使用int,则你的程序能正确计算的最大n是多少(此时对于所有的m,都是有效的)?
我编写的程序如下所示,编译没问题,但是总是运行不出结果,希望高手指点下。
#include"stdafx.h"
#include <iostream>
using namespace std;
int fac(int m, int k);
int main()
{
int m, k;
cout << "输入m,k:\n";
cin >> m >> k;
while (1){
if (m<k){
cout << "m,k的取值不正确,请重新输入\n";
cin >> m >> k;
}
else break;
}
cout << "m的k的组合数为:" << fac(m, k) << endl;
return 0;
}
int fac(int m, int k){
if (m<k)return -1;
int a = 1, b = 1, c = 1;
for (int i = m; i >= 1; i--)
a *= i;
for (int j = k; j >= 1; j--)
b *= j;
for (int l = m - k; l >= 1; l--)
c *= l;
return a / (b*c);
}
|