Pagini recente » Cod sursa (job #1717863) | Cod sursa (job #511648) | Cod sursa (job #1002256) | Cod sursa (job #2982547) | Cod sursa (job #546214)
Cod sursa(job #546214)
#include<stdio.h>
#include<stdlib.h>
#define max(a,b) ((a) > (b) ? (a) : (b))
#define MIN 0
#define MAX 10000
int nrDiv(int a, int b)
{
int r = 0, k = 0;
while(r == 0){
r = a % b;
if(r == 0){
k++;
a /= b;
}
else
break;
}
return k;
}
int func(int n)
{
int k = 0, i;
if(n < 5)
return 0;
for(i = 5; i <= n; i++)
k += nrDiv(i,5);
return k;
}
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;
}
rez = minDiv(MIN,MAX,p);
rez = adjust(p,rez);
fprintf(g,"%d ",rez);
fclose(f);
fclose(g);
return 0;
}