Cod sursa(job #562124)

Utilizator SkillZoneOvy The Best SkillZone Data 22 martie 2011 13:00:20
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
/* 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;
	}