求C(N, M),即求M个数中选N个数的组合方案数,该如何解决

求C(N, M),即求M个数中选N个数的组合方案数
源代码是这样的,哪里错啦,怎么输不出正解啊??求指点。

#include<iostream>
using namespace std;
int main()
{
int n,i;
long int a,b,sub,sum;
cin>>n;
while(n--)
{
cin>>a>>b;//N=a,M=b
for(i=0;i<a-1;i++)
a*=(a-1);
for(i=0;i<b-1;i++)
b*=(b-1);
sub=b-a;
for(i=0;i<sub-1;i++)
sub*=(sub-1);
sum=b/(a*sub);
cout<<sum<<endl;
}
return 0;
}

------解决方案--------------------
#include<iostream>
using namespace std;
int main()
{
 int n,i;
 long int a,b,sub,sum;
 cin>>n;
 while(n--)
 {
cin>>a>>b;//N=a,M=b
int a1 = a, b1 = b;
 for(i=a-1;i>0;i--)
 a1*=i;
 for(i=b-1;i>0;i--)
 b1*=i;
 sub=b-a;
 for(i=sub-1;i>0;i--)
 sub*=i;
 sum=b1/(a1*sub);
 cout<<sum<<endl;
 }
 return 0;
}
------解决方案--------------------
C/C++ code

#include <iostream>
using namespace std;
int main()
{
    int n,i;
    long int a,b,sum;
    cin>>n;
    while(n--)
    {
        cin>>a>>b;//N=a,M=b
        sum = 1;
        for(i = b; i >= b - a; --i)
            sum *= i;
        cout<<sum<<endl;
    }
    getchar();
    return 0;
}