Cod sursa(job #1108497)

Utilizator danny794Dan Danaila danny794 Data 15 februarie 2014 19:17:47
Problema Factorial Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <cstdio>

using namespace std;

int compute(int x) {
  int p = 5;
  int s = 0;
  while(x / p) {
    s += x / p;
    p *= 5;
  }
  return s;
}

int solve(int x) {
  int m, left = 1, right = 1 << 27, partial_result;
  while( left <= right ) {
    m = (left + right) >> 1;
    partial_result = compute(m);
    if( partial_result > x ) {
      right = m - 1;
    } else if ( partial_result < x ) {
      left = m + 1;
    } else if (partial_result == x)
      return (m / 5) * 5;
  }
  return -1;
}

void read() {
  freopen("fact.in", "r", stdin);
  freopen("fact.out", "w", stdout);
  int x;

  while(scanf("%d", &x) == 1) {
    int r = solve(x);
    printf("%d\n", r ? r : 1);
  }
}

int main() {
  read();
  return 0;
}