题目链接:http://acm.hrbeu.edu.cn/index.php?act=problem&id=1039
Binomial Showdown
TimeLimit: 1 Second MemoryLimit: 32 Megabyte
Totalsubmit: 2337 Accepted: 573
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 2^31.
Sample Input
4 2
10 5
49 6
0 0
Sample Output
6
252
13983816
题目没有给定n的范围只说了结果在2^31范围之内,所以打表肯定不行,直接用了Java的BigInteger。
import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main
{
public static void main(String args[])
{
Scanner cin=new Scanner(System.in);
while(cin.hasNext())
{
int n=cin.nextInt();
int k=cin.nextInt();
if(n==0&&k==0) break;
int tmp=n-k;
int tt;
if(tmp<k)
{
tt=tmp;
tmp=k;
k=tt;
}
BigInteger ans1=BigInteger.ONE;
BigInteger ans2=BigInteger.ONE;
BigInteger ans;
for(int i=n-k+1;i<=n;i++)
{
ans1=ans1.multiply(BigInteger.valueOf(i));
}
for(int i=2;i<=k;i++)
{
ans2=ans2.multiply(BigInteger.valueOf(i));
}
ans=ans1.divide(ans2);
System.out.println(ans);
}
}
}