Robię sobie zadanko na SPOJa - Dwumiany. Wydaje mi się, że w tym kodzie jest wszystko dobrze, dla wszystkich liczb gdzie wynik jest mniejszy niż 1 000 000 000 jest w porządku. Proszę o podpowiedź.
#include <iostream>
#include <iomanip>
using namespace std;
int t, liczbaA, liczbaB;
int main()
{
cin >> t;
for(int i=1; i<=t;i++)
{
cin >> liczbaA >> liczbaB;
long double silniaA=1;
long double silniaB=1;
long double silniaC=1;
if(liczbaA==0) silniaA=1;
else
{
for (int j=1; j<=liczbaA;j++)
{
silniaA = silniaA * j;
}
}
if(liczbaB==0) silniaB=1;
else
{
for (int k=1; k<=liczbaB;k++)
{
silniaB = silniaB * k;
}
}
if ((liczbaA==0) && (liczbaB == 0))silniaC=1;
else
{
for (int l=1; l<=liczbaA-liczbaB;l++)
{
silniaC = silniaC * l;
}
}
long double wynik = silniaA/(silniaB*silniaC);
cout << setprecision(10000);
cout << wynik << endl;
}
return 0;
}