Cod sursa(job #1384377)

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


int findNumZeros(int x) {
  //  cout << x <<  " -> ";
  int count = 0;
  for(int 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");

  int P; fin >> P;

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

  while(lo <= hi) {
    int mid = lo + (hi - lo)/2;
    int 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 << lo - (lo%5) << '\n';

  return 0;
}