Cod sursa(job #31517)

Utilizator alecmanAchim Ioan Alexandru alecman Data 16 martie 2007 10:14:49
Problema Factorial Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
/*
 *
 *
  info-arena 2.0 - Arhiva - Factorial
 *
 *
 */

#include<stdio.h>

#define INPUT "fact.in"
#define OUTPUT "fact.out"

FILE *fin=fopen(INPUT, "r"),*fout=fopen(OUTPUT, "w");

long p;

inline void citire(){fscanf(fin, "%ld", &p);}
void rezolvare();

int main()
{
  citire();
  rezolvare();
  fclose(fin);
  fclose(fout);
}

void rezolvare()
{
  long k=0,pas=1,cont=0,valoare=0,valad=5;
  while(k<p&&pas!=0)
  {
    ++cont;
    k+=pas;
    valoare+=valad;
    if(cont==5)
    {
      ++k;
      pas*=5;
      ++pas;
      cont=0;
      valad*=5;
    }
    while(k>p)
    {
      if(cont==0)
      {
        --pas;
        pas/=5;
        --k;
        k-=pas;
        --pas;
        pas/=5;
        valad/=5;
        valoare-=valad;
        valad/=5;
      }
      else
      {
        k-=pas;
        --pas;
        pas/=5;
        cont=0;
        valoare-=valad;
        valad/=5;
      }
    }
  }
  if(pas)
  fprintf(fout, "%ld\n", valoare);
  else
  fprintf(fout, "%ld\n", -1);
}