Pagini recente » Cod sursa (job #1281952) | Cod sursa (job #1389049) | Cod sursa (job #537582) | Cod sursa (job #342231) | Cod sursa (job #188150)
Cod sursa(job #188150)
#include <stdio.h>
long n, nr;
void cit()
{
FILE *f=fopen("fact.in", "r");
fscanf(f, "%ld", &n);
fclose(f);
}
long put5(long nr)
{
long i=0;
while (nr%5==0)
{
nr/=5;
i++;
}
return i;
}
void fact()
{
long nr_cfr[13]={0, 6, 31, 156, 781, 3906, 19531, 97656, 488281, 2441406, 12207031, 61035156, 305175781};
long i, a, b, c;
a=0;
b=12;
if (n==0)
{
nr=1;
return ;
}
while (a<b)
{
c=(a+b)/2;
if (c==a || c==b) break;
if (n==nr_cfr[c])
{
if (c==1) nr=25;
else if (c==2) nr=125;
else nr=nr_cfr[c-2]*100+25;
break;
}
else if (n<nr_cfr[c]) b=c-1;
else a=c;
}
if (a==0) i=0;
else if (a==1) i=25;
else if (a==2) i=125;
else i=nr_cfr[a-2]*100+25;
nr=nr_cfr[a];
while (nr<n)
{
i+=20;
nr+=4;
if (nr==n) break;
else if (nr>n)
{
i-=5*(nr-n);
nr=n;
}
else
{
i+=5;
nr+=put5(i);
}
}
if (nr==n) nr=i;
else if (nr>n) nr=-1;
if (n==0) nr=1;
}
void tip()
{
FILE *f=fopen("fact.out", "w");
fprintf(f, "%ld\n", nr);
fclose(f);
}
int main()
{
cit();
fact();
tip();
return 0;
}