//#include "stdafx.h"//vc++6.0加上這壹行.
#include "stdio.h"
#include "string.h"
#include "math.h"
#include "stdlib.h"
char *Fact(int n){
int i,j,k,tmp,len;
char *pa,*pb,*px,s[11]="",*ps9=s+9;
double dec=0;
for(n++,i=2;i<n;dec+=log10(i++));
len=(int)dec+2;
if(!(pa=(char *)malloc(len)) || !(pb=(char *)malloc(len))){
printf("Application memory failure...");
exit(0);
}
for(i=0;i<len;*(pa+i)=*(pb+i++)=0);
for(i-=2,j=--n;j;*(pb+i--)=j%10,j/=10);
len--;
i++;
while((k=--n)>1){
for(px=ps9;k;*px--=k%10,k/=10);
for(k=0,tmp=ps9-px;k<tmp;k++){
for(px=ps9,j=len-1;j>=i;*(pa+j-k)+=*(pb+j--) * *(px-k));
for(px=pa-k,j=len-1-k;j>=i-k;j--){
if(*(px+j)>9){
*(px+j-1) += *(px+j)/10;
*(px+j) %= 10;
}
}
if(i) i--;
}
px=pa;
pa=pb;
pb=px;
for(k=0;k<len;*(pa+k++)=0);
}
free(pa);
for(i=0;i<len;*(pb+i++)+='0');
return pb;
}
void Fn_Fm(char *pa,char *pb){
int i=strlen(pa),j=strlen(pb),len=i;
char *p,*p0;
if(i<j) len=j;
if(!(p0=p=(char *)malloc((len+2)*sizeof(char)))){
printf("Memory allocation failure!");
exit(0);
}
while(*p++='0',len>i++);
while(*p++=*pa++);
p-=(j+1);//
while(*p++ -=(*pb++ -'0'),*pb);
for(p--;p>p0;p--)
if(*p <'0'){
*p+=10;
(*(p-1))--;
}
if(*p<'0'){
printf("-");
for(p+=len,(*p)--;p>p0;p--)
if((*p=0x69-*p)>'9'){
*p-=10;
(*(p-1))--;
}
}
while(*p<='0' && *p!='\0') p++;
if(*p) printf("%s.\n",p);
else printf("0.\n");
free(p0);
}
void main(void){
int n,m;
char *pm,*pn;
printf("Please enter m & n(int:0<=m<=n).\n");
scanf("%d%d",&n,&m);
Fn_Fm(pn=Fact(n),pm=Fact(m));
free(pm);
free(pn);
printf("\n");
}