Factorial by tabasa

#define le 40\x0d
double d[le];\x0d
int age[le];\x0d
int k=10;\x0d
double max=1;\x0d
void reset()\x0d
{\x0d
int i=1;\x0d
for(;i<le;i++){d[i]=0;}\x0d
d[0]=1;\x0d
}\x0d
int t()\x0d
{\x0d
int i=le-1;\x0d
for(;i>0;i--) {if(d[i]>0)return i;}\x0d
return 0;\x0d
}\x0d
void pr()\x0d
{\x0d
\x09int i=0;\x0d
\x09int j=t();\x0d
\x09printf("%.0f",d[j]);\x0d
\x09if(j>0)for(i=j-1;i>=0;i--) {printf("%010.0f",d[i]);}\x0d
\x09puts("");\x0d
}\x0d
int f(int a)\x0d
{\x0d
if(a==0)return 0;\x0d
\x09int i;\x0d
\x09for(i=0;i<le;i++){age[i]=0;}\x0d
\x09for(i=0;i<le-1;i++) {\x0d
\x09\x09d[i]*=a;\x0d
\x09\x09if(d[i]>=max){\x0d
\x09\x09\x09age[i+1]=(int)(d[i]/max);\x0d
\x09\x09\x09d[i]=d[i]-age[i+1]*max;\x0d
\x09\x09}\x0d
\x09}\x0d
\x09for(i=0;i<le-1;i++) {d[i]+=age[i];}\x0d
\x09return (a==1?a:f(a-1));\x0d
}\x0d
\x0d
\x0d
main(){char z[5];int a;for(a=0;a<k;a++)max*=10;while(gets(z)){reset();sscanf(z,"%d",&a);f(a);pr();}}\x0d

Note that non-ascii characters in the above source code will be escaped (such as \x9f).

download

return to the top page