HDU 2519 新生晚会
题目中用到组合的方法
{利用组合的上面第三个原理,可以很快的减少组合式中乘数的使用,本题还有一个要注意的地方就是在数据存储方式,由于阶乘的结果会很大,计算过程中可以使用到一边进行乘法运算一边进行除法运算,降低数据量}
#include <iostream>
using namespace std;
__int64 zu (__int64 a,__int64 b) //使用__int64位整形存储 存储范围在2^64
{
__int64 m=1;
__int64 i;
if(a<b)
return 0;
if(a==b||a==0)
return 1;
if(a-1==b||b==1)
return a;
for(i=1;i<=a-b;i++) //简化组合代码C n r=C n-r r
{
m=m*(b+i)/i; //乘数与除数相同,一边乘数一边除数
}
return m;
}
int main()
{
int n;
__int64 a,b;
cin>>n;
while(n--)
{
scanf("%I64d",&a);
scanf("%I64d",&b);
printf("%I64d\n",zu(a,b));
}
return 0;
}