Pagini recente » Cod sursa (job #1206460) | Cod sursa (job #2792094) | Cod sursa (job #1294234) | Cod sursa (job #1860253) | Cod sursa (job #2088911)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
typedef unsigned int uint;
uint n_zeros(uint n);
int main(void)
{
FILE *in = fopen("fact.in", "r");
FILE *out = fopen("fact.out", "w");
if(in != NULL && out != NULL)
{
uint n;
fscanf(in, "%u%*c", &n);
if(n == 0)
{
fprintf(out, "1\n");
return 0;
}
uint p = 0, q = 100000000, min = 0;
bool found = false;
while(p <= q)
{
uint mid = (p + q) / 2;
uint z = n_zeros(mid);
if(z == n)
{
// printf("here: %u %u %u %u\n", z, n, mid, n_zeros(mid));
found = true;
min = mid;
q--;
}
else if(n > z)
{
p = mid + 1;
}
else if(n < z)
{
q = mid - 1;
}
}
if(!found)
{
fprintf(out, "-1\n");
}
else
{
fprintf(out, "%u\n", min);
}
fclose(in);
fclose(out);
}
else
{
printf("file error\n");
}
return 0;
}
uint n_zeros(uint n)
{
uint zeros = 0, idx = 1;
while(1)
{
uint d = n / (uint)pow(5, idx++);
zeros += d;
if(!d)
{
break;
}
}
return zeros;
}