C++ 组合数

来源:百度知道 编辑:UC知道 时间:2024/05/06 21:59:25
用C++编组合数

#include <iostream>

using namespace std;

int main()

{
long int t;

cin>>t;

for(int i=0;i<t;i++)

{

long int m,n;

cin>>n;

cin>>m;

long int s=1;

long int w=1;

for(int I=0; I<n; I++)

{w=w*m;

m--;

}

for(int a=0, b=n; a<n; a++)

{s=s*b;

b=b-1;

}

cout<< w/s<<endl;

}

return 0;

}

运行也没发现什么问题
漏洞出在哪里?

如果你用这个水平编ACM的话,估计百分之九十数开小了,因为竞赛里面经常是大数,至少long,有时还需自定义char aa[1000];
还有一点,你的w/s是什么型函数?int?double?最好定义一下
先int k = w/s ;
cout << k << endl ;
这样子好多了。还有就是几种特殊情况你没有罗列出来。比如m>n ,n=0等
还有一点,第二个循环你不用那样浪费时间
直接for ( int i = 1 ; i <= n ; i++)
s = s*i ;
又或者直接定义long s = n ;
while ( n --) {
s = s* n;
}

没问题吧?!如果要说有漏洞,那m不能=0,n不能大于m。。。

可能是m,n的输入没有限定,也有可能是m,n过大,导致结果溢出

语法没有问题,但不知道打算做什么。可能是和目的有出入吧。