Cod sursa(job #829333)
Utilizator | Cornigeanu Calin Sadmann | Data | 5 decembrie 2012 02:07:31 |
---|---|---|---|
Problema | Factorial | Scor | 80 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.53 kb |
#include<stdio.h>
FILE *in,*out;
int nr5,p;
int num,aux,aux2;
int main()
{
in=fopen("fact.in","rt");
out=fopen("fact.out","wt");
fscanf(in,"%d",&p);
if(!p)
{
fprintf(out,"1");
return 0;
}
while(nr5<p)
{
aux=num+=25;
nr5+=1<<2;
if(nr5<p)
{
while(!(aux%25))
{
nr5+=1<<1;
aux/=25;
}
if(!(aux%5))
++nr5;
}
else
{
aux2=nr5-p+1;
num-=(aux2<<2)+(aux2--);
nr5-=aux2;
}
}
if(nr5==p)
fprintf(out,"%d",num);
else
fprintf(out,"-1");
return 0;
}