Cod sursa(job #1430087)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 7 mai 2015 21:23:42
Problema Factorial Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>

#define HIGH 25000000

int n0;
inline int log2(int x) {
  int ans;
  asm ("bsr %1, %0" : "=r" (ans) : "r" (x));
  return ans;
}
inline int countFive(int x) {
  int div = 5;
  int ans = 0;

  while (x >= div && ans <= n0) {
    ans = ans + (x / div);
    div = div + (div << 2);
  }
  return ans;
}
int main(void) {
  FILE *f = fopen("factorial.in", "r");
  int lo, hi;

  fscanf(f, "%d", &n0);
  fclose(f);

  if (n0) {
    lo = -1;
    hi = HIGH + 1;
    while (hi - lo > 1) {
      int mid = lo + ((hi - lo) >> 1);
      if (countFive(mid) < n0) {
        lo = mid;
      } else {
        hi = mid;
      }
    }
    f = fopen("factorial.out", "w");
    fprintf(f, "%d\n", countFive(hi) == n0 ? hi : -1);
  } else {
    f = fopen("factorial.out", "w");
    fputs("1\n", f);
    fclose(f);
  }
  fclose(f);
  return 0;
}