long long factorial(int n)
{
long long m = 1;
for(int i=1;i<=n;i++)
m*=i;
return m;
}
long long C(int n,int m)
{
return factorial(n)/(factorial(m)*factorial(n-m));
//可能会溢出
}
正解:
long long C(int n,int m)
{
if(m<n-m) m = n-m;
long long ans = 1;
for(int i=m+1;i<=n;i++) ans *= i;
for(int i=1;i<=n-m;i++) ans /= i;
return ans;
}
others:
long long C(int n,int m)
{
long long ans = 1;
for(int i=1;i<=m;i++)
ans = ans * (n-i+1)/i;
return ans;
}