打表记录分子分母的质因数。。。。
然后计算结果。。。。。
代码如下:
#include <cstdio>
#include <cmath>
#include <cstring>
#define M 10010
int p, q, r, s;
int c[M];
void div(int t, int d)
{
int len = sqrt(t+0.5);
for(int i = 2; i <= len; i++) if(t%i==0)
{
while(t%i==0)
{
c[i]+=d;
t/=i;
}
}
c[t]+=d;
}
int main ()
{
int max;
while(~scanf("%d%d%d%d",&p,&q,&r,&s))
{
max = 0;
max = p>max?p:max;
max = r>max?r:max;
memset(c,0,sizeof(c));
for(int i = p-q+1; i <= p; i++) div(i,1);
for(int i = 2; i <= s; i++) div(i,1);
for(int i = r-s+1; i <= r; i++) div(i,-1);
for(int i = 2; i <= q; i++) div(i,-1);
double ans = 1.0;
for(int i = 2; i <= max; i++)
{
if(c[i]>0) {ans*=i; c[i--]--; }
if(c[i]<0) {ans/=i; c[i--]++; }
}
printf("%.5lf\n",ans);
}
return 0;
}