EricYang

Tech Spot of Eric

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

Binomial Showdown

Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 14048 Accepted: 4282

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>

using namespace std;

int main()
{
    long n,k;
    double fenzi,fenmu;
    long i;

    while(scanf("%ld%ld",&n,&k)!=EOF && (n+k))
    {
        fenzi=1;
        fenmu=1;
        if(k>n/2)
           k=n-k;
        for(i=k; i>=1; i--)
        {
            fenzi*=(n-k+i);
            if((int)fenzi%i==0)
            {
                fenzi=fenzi/i;
            }
            else
                fenmu*=i;
        }
        printf("%.0f\n",(double)fenzi/fenmu);
    }
    return 0;
}
posted on 2011-06-02 16:34  Eric-Yang  阅读(297)  评论(0编辑  收藏  举报