PC/UVa:110506/10105
二项式定理,并不会溢出。
#include <iostream>
#include <vector>
using namespace std;
unsigned int Combinatinon(unsigned int uiTotal, unsigned int uiSelect)
{
unsigned int uiRet = 1;
for (size_t i = 0; i < uiSelect; i++)
{
uiRet *= uiTotal - i;
}
for (size_t i = 0; i < uiSelect; i++)
{
uiRet /= uiSelect - i;
}
return uiRet;
}
int main()
{
int n = 0, k = 0;
while (cin >> n >> k){
vector<unsigned int> vuiPower(k, 0);
unsigned int uiCoefficient = 1, uiTotal = n;
for (int i = 0; i < k; i++)
{
cin >> vuiPower[i];
}
for (int i = 0; i < k; i++)
{
uiCoefficient *= Combinatinon(uiTotal, vuiPower[i]);
uiTotal -= vuiPower[i];
}
cout << uiCoefficient << endl;
}
return 0;
}
/*
2 2
1 1
2 12
1 0 0 0 0 0 0 0 0 0 1 0
*/