Cod sursa(job #1010526)

Utilizator iulia_infoIulia Cosmin iulia_info Data 15 octombrie 2013 01:57:03
Problema Factorial Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <fstream>
using namespace std;
 
int get_fives(int x) {
  int count = 0;
  for (int i = 5; i < x; i += 5) {
    count += x/i;
  }
  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 += get_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;
}