Pagini recente » Atasamentele paginii miculstring | Statisticile problemei Micul String | Monitorul de evaluare | Autentificare | Cod sursa (job #3314693)
#include <stdio.h>
#include <stdlib.h>
FILE *in, *out;
int v[1000], v2[1000];
int main()
{
in = fopen("fact.in", "r");
out = fopen("fact.out", "w");
int nr = 1, i = 1, p, n, dif, st, dr, mij, cp;
fscanf(in, "%d ",&p);
v2[1] = 5;
v[1] = 1;
while(nr <= p){
i++;
nr = (nr * 5) + 1;
v[i] = nr;
v2[i] = v2[i - 1] * 5;
}
i--;
nr = (nr - 1) / 5;
n = v2[i];
dif = p - nr;
while(dif >= 5){
st = 1;
dr = i;
while(st <= dr){
mij = (st + dr) / 2;
if(v[mij] >= dif){
st = mij + 1;
nr = mij;
}
else{
dr = mij - 1;
}
}
dif -= v[nr];
n += v2[nr];
i = nr;
}
while(dif > 0){
n += 5;
cp = n;
while(cp % 5 == 0){
cp /= 5;
dif--;
}
}
if(dif != 0){
fprintf(out, "-1");
}
else{
fprintf(out, "%d ",n);
}
return 0;
}