#include double getdouble() { double r=0; double pos=0.1; int afterpoint=0; char c; while((c=getchar())!='\n') { if(c=='.') afterpoint=1; else { if(afterpoint==0) r=r*10+c-'0'; else { r=r+(c-'0')*pos; pos=pos*0.1; } } } return r; } int fac_int(int p) { /*int result=1; while(p>1) { result=result*p; p=p-1; }*/ if(p<=1) return 1; else return p*fac_int(p-1); //return result; } float fac_float(float p) { float result=1; while(p>1) { result=result*p; p=p-1; } /*if(p<=1) return 1; else return p*fac_float(p-1);*/ return result; } double fac_double(double p) { /*double result=1; while(p>1) { result=result*p; p=p-1; }*/ if(p<=1) return 1; else return p*fac_double(p-1); //return result; } int main() { double r=getdouble(); printf("Int: %d\n",fac_int(r)); printf("Float: %.6f\n",fac_float(r)); printf("Double: %.6f\n",fac_double(r)); return 0; }