Pagini recente » Cod sursa (job #540077) | Cod sursa (job #1820271) | Cod sursa (job #2330404) | Cod sursa (job #1012700) | Cod sursa (job #546748)
Cod sursa(job #546748)
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int func(int n)
{
int k =(int) (log(n) / log(5));
int i = 1, q = 0, j = 1;;
for(i = 1; i <= k; i++){
j *= 5;
q += n / j;
}
return q;
}
int minDiv(int min, int max, int p)
{
int mid, q;
mid = (min + max) >> 1;
q = func(mid);
if(p != q && mid == min || mid == max)
return -1;
else if(p < q)
return minDiv(min,mid - 1,p);
else if (p > q)
return minDiv(mid + 1, max,p);
else
return mid;
}
int adjust(int p, int rez)
{
int i;
if(rez == -1)
return -1;
for(i = rez - 1; i >= 1; i--)
if(p != func(i))
return i + 1;
return i;
}
int main()
{
FILE *f = fopen("fact.in","r");
FILE *g = fopen("fact.out","w");
int p, rez;
fscanf(f,"%d",&p);
if(p == 0){
fprintf(g,"%d ",1);
fclose(f);
fclose(g);
return 0;
}
else if(p <= 100000){
rez = minDiv(0,1000000,p);
rez = adjust(p,rez);
fprintf(g,"%d ",rez);
fclose(f);
fclose(g);
return 0;
}
else {
rez = minDiv(400000,500000000,p);
rez = adjust(p,rez);
fprintf(g,"%d ",rez);
fclose(f);
fclose(g);
return 0;
}
}