Cod sursa(job #1546662)

Utilizator Anonymous1010Chilivercu Cristian Anonymous1010 Data 8 decembrie 2015 15:54:17
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>

long long nrz(long long x)
{
  long long nr, nr_div;


  for(nr = 0, nr_div = x / 5; nr_div > 0; nr_div /= 5)
    nr += nr_div;
  
  return nr;
}

int main()
{
  long long left, right, nrz_left, middle, nrz_middle;
  int p;
  freopen("fact.in", "r", stdin);
  freopen("fact.out", "w", stdout);

  scanf("%d", &p);

  if(p == 0)
  {
    printf("1\n");
    return 0;
  }

  left = 0;
  right = 500000000;

  while(left < right)
  {
    middle = (left + right) / 2;
    nrz_middle = nrz(middle);
    if(nrz_middle == p)
      right = middle;
    else
      if(nrz_middle > p)
        right = middle - 1;
      else
        left = middle + 1;
  }

  nrz_left = nrz(left);
  if(nrz_left != p && nrz(left + 1) != p)
    printf("-1\n");
  else
    if(nrz_left == p)
      printf("%lld\n", left);
    else
      printf("%lld\n", right);

  return 0;
}