这是一个非常简单的程序,有 t 个测试用例,我们必须找到 nCr=n!/r!*(nr)!。所以它适用于较小的值,如 20C2,但不适用于较大的值,如 100C10。它给出 32C2=-6 ,100C10 浮点异常。如何使它为 1<=n<=r<=1000 ?? 注意:我不是要求 long double 或不想将其更改为 float。答案应该类似于 100C10 = 17310309456440 类似 989C45=?
#include<iostream>
using namespace std;
long long int fact(long long int num);
int main()
{
int t;
cin>>t;
long long int n[1000],r[1000],c[1000];
for(int i=0;i<t;i++)
{
cin>>n[i];
cin>>r[i];
}
for(int i=0;i<t;i++)
{
c[i]=fact(n[i])/(fact(r[i])*fact(n[i]-r[i])) ;
cout<<c[i];
}
return 0;
}
long long int fact(long long int num){
long long int k;
if(num==0)
num=1;
else
{
for(k=num-1;k>0;k--)
num=num*k;
}
return num;
}