C++组合数不知道错哪

输入两个正整数n、m,要求输出组合数C(n,m)。
例如,当n=5、m=3时,组合数C(5,3)=(5×4×3)/(3×2×1)=10。
组合数可用以下公式计算:

img

输入格式:
测试数据有多组,处理到文件尾。每组测试输入两个整数n,m(0 < m ≤ n ≤ 20)。

输出格式:
对于每组测试,输出组合数。

输入样例:
5 3
20 12
输出样例:
10
125970

#include
using namespace std;
int main(){
    int n,m;
    while(cin>>n>>m){
        int a=1,b=1,c=1,sum=0;
        for(int i=1;i<=n;i++){
            a*=i;
        }
        for(int j=1;j<=m;j++){
            b*=j;
        }
        for(int q=1;q<=(n-m);q++){
            c*=q;
        }
        sum=a/(b*c);
        cout<" "<" "<return 0;
}

应该是因为:

  1. 溢出。int存不下这么大的数字(毕竟20!可是很大的),改成long long。
  2. 多输出了一句cout<<a<<" "<<b<<" "<<c<<endl,根据题目输出,这句是不需要的(不知道是不是测试忘了删了)。
  3. 题目只输入两组数据,但是使用了while,这样会导致程序一直不退出,可能也是错误的原因。
    综上,这样改一下应该就行了:
#include <iostream>

using namespace std;

int main()
{
    int n, m;
    for (int k = 0; k < 2; ++k)
    {
        cin >> n >> m;
        long long a = 1, b = 1, c = 1;
        for (int i = 1; i <= n; i++)
        {
            a *= i;
        }
        for (int j = 1; j <= m; j++)
        {
            b *= j;
        }
        for (int q = 1; q <= n - m; q++)
        {
            c *= q;
        }
        long long sum = a / (b * c);
        cout << sum << endl;
    }
    return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^