Binomial Showdown
Binomial Showdown
Description In how many ways can you choose k elements out of n elements, not taking order into account? Input The input will contain one or more test cases. Output For each test case, print one line containing the required number. This number will always fit into an integer, i.e. it will be less than 231. Sample Input Sample Output Source |
||||||||
Description
In how many ways can you choose k elements out of n elements, not taking order into account?
Write a program to compute this number.
Input
The input will contain one or more test cases.
Each test case consists of one line containing two integers n (n>=1) and k (0<=k<=n).
Input is terminated by two zeroes for n and k.
Output
For each test case, print one line containing the required number. This number will always fit into an integer, i.e. it will be less than 231.
Warning: Don't underestimate the problem. The result will fit into an integer - but if all intermediate results arising during the computation will also fit into an integer depends on your algorithm. The test cases will go to the limit.
Sample Input
4 2
10 5
49 6
0 0
Sample Output
6
252
13983816
Source
模板题,求组合数汇总(点这里)
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<cmath>
#include<iostream>
#include<sstream>
#include<iterator>
#include<algorithm>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<deque>
#include<queue>
using namespace std;
typedef long long ll;
ll a[100000000];
ll C(ll n,ll m)
{
if (n - m < m)
m = n - m;
a[0] = 1;
for (int i = 1; i <= m; i++)
{
a[i] = (n - i + 1) * a[i - 1] / i;
}
return a[m];
}
int main()
{
ll n,m;
while (~scanf("%lld%lld",&n,&m) && (n || m))
{
cout<<C(n,m)<<endl;
}
}