Cod sursa(job #1010515)

Utilizator iulia_infoIulia Cosmin iulia_info Data 15 octombrie 2013 01:21:53
Problema Factorial Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <fstream>
using namespace std;
 
int fives(int x) {
  int count = 0;
  while ((x > 0) && (x % 5 == 0)) {
    count++;
    x /= 5;
  }
  return count;
}

int prev_multiple(int x) {
  while (x % 5 != 0) { x--; }
  return x;
}

int get_result(int p) {
  int left = 1;
  int right = p * 5;

  while (left <= right) {
    int mid = (left + right) / 2;
    int mid_fives = 0;
    for (int i = 5; i <= mid; i += 5) {
      mid_fives += fives(i);
    }
    if (mid_fives == p) {
      return prev_multiple(mid);
   } else {
      if (mid_fives < p) { left = mid + 1; }
      else { right = mid - 1; }
    }
  }
  return -1;
}
 
int main()
{
  ifstream input("fact.in");
  int p;
  input >> p;

  int result;
  if (p == 0) { result = 1; }
  else { result = get_result(p); }

  ofstream output("fact.out");
  output << result;
}