hdu 2519 新生晚会 (求排列组合时容易溢出)

时间:2023-03-09 05:06:49
hdu 2519 新生晚会 (求排列组合时容易溢出)
#include<stdio.h>
#include<algorithm>
using namespace std;
void cal(int n,int m)
{
long long ans=;
m=min(m,n-m);
int j=m;
for(int i=n;m>;m--,i--)
{
ans*=i;
}
for(int i=;i<=j;i++)
{
ans/=i;
}
printf("%I64d\n",ans);
}
int main()
{
int _case;
int n,m;
scanf("%d",&_case);
while(_case--)
{
scanf("%d%d",&n,&m);
if(m>n)printf("0\n");
else cal(n,m);
}
return ;
}

注意此写法long long也会溢出!!!!!!!!!!!!!!

#include<stdio.h>
#include<algorithm>
using namespace std;
#define eps 1e-8
int main()
{
int _case;
int n,m;
scanf("%d",&_case);
while(_case--)
{
scanf("%d%d",&n,&m);
if(m>n)printf("0\n");
else
{
double ans=;
m=min(m,n-m);
int j=m;
for(int i=; i<m; i++)
{
ans*=n--;
ans/=j--;
}
//long long x=ans+eps;
printf("%.0lf\n",ans+eps);
}
}
return ;
}
#include<iostream>
#include<cstdio>
using namespace std;
int main(void)
{
int m,n,t;
_int64 sum;
cin>>t;
while(t--)
{
cin>>n>>m;
sum=;
for(int i=;i<=m;i++)
{
sum*=n--;
sum/=i;
}
printf("%I64d\n",sum);
}
return ;
}