Pagini recente » Cod sursa (job #1000969) | Cod sursa (job #2365316) | Cod sursa (job #1492715) | Cod sursa (job #780230) | Cod sursa (job #2615361)
#include<bits/stdc++.h>
using namespace std;
ifstream f("fact.in");
ofstream g("fact.out");
int const Max=1e8;
int M=Max,p;
int numar_zerouri(int n)
{
int p=5;
int s=0;
while(n/p)
{
s+=n/p;
p*=5;
}
return s;
}
void caut_binara(int x, int st, int dr, int& M)
{
if(st<=dr)
{
int p=5;
int mij=(st+dr)/2, s=numar_zerouri(mij);
if(s==x) ///daca am numarul corect de zerouri
{
if(M>mij)
M=mij;
while(numar_zerouri(mij-1)==x) ///caut in stanga pana gasesc cel mai mic numar, care sa respecte cerintele
{
mij--;
M=mij;
}
}
else if (s>x) caut_binara(x, st, mij-1, M); ///daca numarul are prea multe zerouri, caut in stanga
else caut_binara(x, mij+1, dr, M); ///altfel, caut in dreapta
}
}
int main()
{
f>>p;
if(p==0)
{
g<<1;
return 0;
}
caut_binara(p,0,10*p,M);
if(M==Max)
{
g<<-1;
return 0;
}
g<<M;
return 0;
}