Pagini recente » Cod sursa (job #1197094) | Cod sursa (job #2707750) | Cod sursa (job #595609) | Cod sursa (job #165236) | Cod sursa (job #1831355)
#include <stdio.h>
#include <stdlib.h>
#define dr 1000000000
long long p;
long long int nr_zero_fact(long long int p)
{
long long s = 0, five = 5;
while(p/five > 0)
{
s += p/five;
five *= 5;
}
return s;
}
long long bin_search(long long left, long long right)
{
if(left < right){
long long mid, nr0;
mid = left + (right - left)/2;
nr0 = nr_zero_fact(mid);
if(nr0 == p) return mid;
else if( nr0 > p){
return bin_search(left, mid - 1);
}
else{
return bin_search(mid + 1, right);
}
}
return 0;
}
int main()
{
FILE *fin, *fout;
fin = fopen("fact.in", "r");
fout = fopen("fact.out", "w");
fscanf(fin, "%d", &p );
if(p == 0){
fprintf(fout, "1\n");
return;
}
long long n;
n = bin_search(0, dr);
if(n == 0){
fprintf(fout, "-1\n");
return;
}
while(nr_zero_fact(n) == p){
n--;
}
n+=1;
fprintf(fout, "%d\n", n);
fclose(fin);
fclose(fout);
return 0;
}