1.由定义式直接算:n!/m!*(n-m)! #include <iostream> using namespace std; long long combine(long long m,long long n ){ long long result=1; for(int i=1;i<n+1;i++){//n! result*=i; } for(int i=1;i<m+1;i++){//n!/m! result/=i; } for(int i=1;i<n-m+1;i++){//n!/(m!*(n-m)!) result/=i; } return result; } int main(){ long long n,m; cin>>m>>n; cout<<combine(m,n)<<endl; return 0; } 2.变形式计算: #include <iostream> using namespace std; long long combine(long long m,long long n ){ long long result=1; for(int i=1;i<m+1;i++) result*=(n-m+i)/i; return result; } int main(){ long long n,m; cin>>m>>n; cout<<combine(m,n)<<endl; return 0; }