计算组合时需要注意一下两点:
1.阶乘超出int,long long 取值范围(如21!);
2.在计算组合时,使用乘法与除法同步进行时,需要先乘再除,以免造成计算错误。
#include<bits/stdc++.h>
using namespace std;
long long N(int n,int m){
if(m>n){
return 0;
}else if(m==n||m==0){
return 1;
}
long long sum = 1;
for(int i=1 ;i<=m;i++){
sum *= n-i+1;
sum /=i;
}
return sum;
}
int main(){
int t;
cin >> t;
while(t--){
int n,m;
cin >> n >> m;
cout << N(n,m) << endl;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
long long N(int n,int m){
if(m>n){
return 0;
}else if(m==0){
return 1;
}
int x = n-m;
if(x>m){ //m大,x小
int tmp=x;
x=m;m=tmp;
}
long long sum = 1;
for(int i=1 ;i<=x;i++){
sum *= n-i+1;
sum /=i;
}
return sum;
}
int main(){
int t;
cin >> t;
while(t--){
int n,m;
cin >> n >> m;
cout << N(n,m) << endl;
}
return 0;
}