Cod sursa(job #81577)

Utilizator Astrid28Ruxandra Cohal Astrid28 Data 3 septembrie 2007 11:04:41
Problema Factorial Scor 75
Compilator c Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>

FILE *fin,*fout;
long p, putere,n;


void citire()
{
  fin=fopen("fact.in","r");
  fout=fopen("fact.out","w");
  fscanf(fin,"%ld",&p);
  fclose(fin);
}



void afisare(long nr)
{
  fprintf(fout,"%ld\n",nr);
  fclose(fout);
}



long div5(long n)
{
  long nr; nr=0;
  while (n%5==0)
    {nr++; n/=5;}
  return nr;
}


void calc()
{
  long i,j,ad,d;int ok;
  ad=0;ok=1;i=1; putere=5;

  while (putere<=n)
    {
      i++;
      putere*=5;
      if (putere<=n)
       {ad+=i-1;
	j=1;
	do{
	   j++;
	   if (j%5!=0)
	     if (putere*j<=n) ad+=i-1;
	  }while (putere*j<=n);
       }
    }


  while (ad&&ok)
    {
      d=div5(n);
      if (ad>=d) {ad-=d; n-=5;}
       else ok=0;
    }


  if (ok) afisare(n);
    else { fprintf(fout,"-1\n"); fclose(fout);}
}



int main()
{
  citire();
  if (p==0) {fprintf(fout,"1\n");fclose(fout);}
   else if (p>=0)
    {n=p*5;
     calc();
    }
   else {fprintf(fout,"-1\n");fclose(fout);}
  return 0;
}