Pagini recente » Cod sursa (job #2562282) | Cod sursa (job #2694934) | Cod sursa (job #1846118) | Cod sursa (job #2581169) | Cod sursa (job #1223411)
/*
* factorial.cpp
* http://www.infoarena.ro/problema/fact
* Created on: 25 Aug 2014
* Author: XiewRikl
*/
#include<fstream>
#include<iostream>
#include<map>
void success(unsigned long long p){
//std::cout<<p<<std::endl;
std::ofstream oFile("fact.out");
oFile<<p<<std::endl;
oFile.close();
}
void fail(void){
//std::cout<<-1<<std::endl;
std::ofstream oFile("fact.out");
oFile<<-1<<std::endl;
oFile.close();
}
unsigned long long int getFives(unsigned long long int f){
unsigned long long int p=0;
//std::cout<<"getFives("<<f;
while(f)
p+= f/= 5;
//std::cout<<")="<<p<<std::endl;
return(p);
}
void fact(unsigned long int P){
if(P==0){success(1);return;}
const unsigned long MAX = 400000016;
unsigned long lfs=0,ris=MAX,cen,t;
//ris /= 2;
//std::cout<<"For P="<<P<<": ";
while(lfs<ris){
cen = (lfs+ris)/2;
t=getFives(cen);
if(t<P) {
if(lfs==cen) break;
lfs=cen;
}
else if(t>P) {
if(ris==cen) break;
ris=cen;
}
else {
success(cen-cen%5);
return;
}
}
fail();
}
int main(void){
std::ifstream iFile("fact.in");
unsigned long long int P;
iFile>>P;
iFile.close();
fact(P);
}