Pagini recente » Cod sursa (job #2748080) | Cod sursa (job #2630033) | Cod sursa (job #1237391) | Cod sursa (job #2531752) | Cod sursa (job #1297932)
#include <iostream>
#include <fstream>
using namespace std;
int Factorial(int n){
int x = 5;
int rezultat = 0;
while(x <= n){
rezultat += n / x;
x *=5;
}
return rezultat;
}
bool Verif1(int n){
return(n % 10 == 1 || n % 10 == 2 || n % 10 == 3 || n % 10 == 4);
}
bool Verif2(int n){
return(n % 10 == 6 || n % 10 == 7 || n % 10 == 8 || n % 10 == 9);
}
int main()
{
ifstream f("fact.in");
ofstream g("fact.out");
int p;
f>>p;
if(p == 0){
g<<1;
return 0;
}
int left = 1;
int right = (1LL<<30);
int ok = 0;
int middle;
while(left < right){
middle = (left + right) >> 1;
if(Factorial(middle) < p){
left = middle + 1;
}
if(Factorial(middle) > p){
right = middle - 1;
}
if(p == Factorial(middle)){
ok = 1;
break;
}
}
if(Verif1(middle)){
middle -= (middle % 10);
}
if(Verif2(middle)){
middle = middle + 5 - (middle % 10);
}
while(Factorial(middle) >= p){
--middle;
}
if(ok)
g<<middle + 1;
else
g<<"-1";
return 0;
}