Cod sursa(job #1384379)

Utilizator laurenttlaurentiu pavel laurentt Data 11 martie 2015 07:31:58
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<fstream>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;


long long findNumZeros(long long x) {
  //  cout << x <<  " -> ";
  long long count = 0;
  for(long long i = 5; i <= x;  i *= 5) {
    //  cout << count << " ";
    count += x/i;
  }
  //  cout << count << "\n";
  return count;
}

int main() {
  ifstream fin("fact.in");
  ofstream fout("fact.out");

  long long P; fin >> P;

  if(P == 0) {
    fout << "1\n";
    return 0;
  }
  
  long long lo = 1, hi = 0x7fffffffffffffff;

  while(lo <= hi) {
    long long mid = lo + (hi - lo)/2;
    long long numZeros = findNumZeros(mid);
    if(numZeros == P) {
      fout << mid - (mid%5) << '\n';
      return 0;
    }
    else if(numZeros < P) {
      lo = mid + 1;
    }
    else {
      hi = mid - 1;
    }
  }
  fout << "-1\n" << '\n';

  return 0;
}