これは 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;
}