POJ 2249 Binomial Showdown C++版

题目链接:http://poj.org/problem?id=1006

题目要求我们求组合数
公式如下

其中我们可以优化下算法,因为

这样k和n-k就取小的计算就是了,其中fixed指不使用科学计数法,其实用printf输出方便的多

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/***************************************
Problem: 2249 User: awq123
Memory: 248K Time: 0MS
Language: C++ Result: Accepted
***************************************/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iomanip>
using namespace std;

int main()
{
double n,k,i,ans;
while(cin>>n>>k&&n;+k)
{
ans=1;
if(k>n-k)
k=n-k;
for(i=n;i>=n-k+1;i--)
ans*=i;
for(i=1;i<=k;i++)
ans/=i;
cout<<fixed<<setprecision(0)<<ans<<endl;
}
}