Pagini recente » Cod sursa (job #686030) | Cod sursa (job #1903963) | Cod sursa (job #1326264) | Cod sursa (job #1983912) | Cod sursa (job #562124)
Cod sursa(job #562124)
/* Factorial
Se da un numar intreg P. Sa se gaseasca cel mai mic numar natural strict pozitiv N pentru care N! are exact P cifre de 0 la sfarsit.
Se stie ca N! = 1 * 2 * 3 * .... * (N - 1) * N.
Date de intrare
Fisierul fact.in va contine pe prima linie numarul intreg P.
Date de iesire
Pe prima linie a fisierului fact.out se va scrie acel numar N care indeplineste condiitle impuse sau -1 daca nu exista un astfel de N.
Restrictii
0 <= P <= 108
Exemple
fact.in fact.out
0 1
2 10
10 45
*/
#include<fstream>
using namespace std;
long fact(int m){
long nr=0;
while(m/5){
m/=5;
nr+=m;
}
return nr;
}
int main(){
long long p,i,m,j=900000030;
ifstream in;
in.open("fact.in");
in>>p;
in.close();
ofstream out("fact.out");
if(p==0){
out<<1;
return 0;
}
for(i=1;i<=j;){
m=(i+j)/2;
if(fact(m)==p){
while(m%10!=5&&m%10!=0)
m--;
out<<m;
break;
}
else if(fact(m)<p)
i=m+1;
else
j=m-1;
if(i==j)
out<<-1;
}
return 0;
}