Pagini recente » Cod sursa (job #273976) | Cod sursa (job #2189021) | Cod sursa (job #2404032) | Cod sursa (job #210499) | Cod sursa (job #1023169)
//
// main.c
// fact
//
// Created by Alexandru Bâgu on 11/6/13.
// Copyright (c) 2013 Alexandru Bâgu. All rights reserved.
//
#include <stdio.h>
int* pOf5;
int make5()
{
pOf5 = (int*) malloc(sizeof(int) * 13);
int p = 1;
pOf5[0] = 1;
int k = 13;
while(k)
{
pOf5[p] = 5 * pOf5[p-1],
k--;
p++;
}
return 0;
}
int get5(int k)
{
int m = 13;
int p = 1 << 7;
int pos = 0;
for(;p > 0; p>>=1)
if(pos + p < m)
if(pOf5[pos + p] <= k)
pos += p;
if(pOf5[pos] == k) return pos;
return 0;
}
int valid(int k, int res)
{
int j = 0;
int i;
for(i = 5; i < k; i+=5)
{
j++;
if((i / 5) % 5 == 0)
j+= get5(i);
}
return j <= res;
}
int binsea(int k)
{
int max = k * 5;
int p = 1 << 30;
int pos = 0;
for(;p > 0; p>>=1)
if(pos + p <= max)
if(valid(pos + p, k))
pos += p;
return pos;
}
int main(int argc, const char * argv[])
{
make5();
FILE *in = fopen("fact.in", "r"),
*out = fopen("fact.out", "w");
int k;
fscanf(in, "%d", &k);
int a = binsea(k);
if(a == 0) a ++;
fprintf(out, "%d", a);
return 0;
}