Cod sursa(job #116439)

Utilizator razvanelu99Razvan Andrus razvanelu99 Data 18 decembrie 2007 17:08:41
Problema Factorial Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.03 kb
#include<stdio.h>
#include<time.h>
//#include<iostream.h>
//#include<conio.h>
int a[100];
int main()
{
//clrscr();
FILE *fin,*fout;
fin= fopen ("fact.in","r");
fout= fopen ("fact.out","w");
long int p,n=0,m,a,b;
//a=clock();
int c=1,i;
//int a1[100],a2[100],i,o,r,n=1,n2;
fscanf(fin,"%D",&p);
/*while (p>0)
     {
     o=1;
     a[1]+=5;
     while (a[o]>=10)
	  {
	  a[o]=a[o]%10;
	  a[o+1]++;
	  o++;
	  }
     if (n<o) n=o;
     for ( i=1;i<=n;i++) a1[i]=a[i];
     n2=n;
     while (a1[1]==0||a1[1]==5)
	  {
	  p--;
	  r=0;
	  o=n2;
	  if (a1[o]<5)
	    {
	    a2[o-1]=(a1[o]*10+a[o-1])/5;
	    r=(a1[o]*10+a[o-1])%5;
	    n2=o-1;
	    o=o-2;
	    }
	  else
	    {
	    a2[o]=a1[o]/5;
	    r=a1[o]%5;
	    o--;
	    }
	  while (o)
	       {
	       a2[o]=(r*10+a1[o])/5;
	       r=(r*10+a1[o])%5;
	       o--;
	       }
	  for (i=1;i<=n2;i++) a1[i]=a2[i];
	  }
     }*/

while (p/78125)
     {
     n+=78125;
     p=p-19524;
     m=n;
     while (m%5==0)
	  {
	  if (m%5==0) p--;
	  m/=5;
	  if (p==0&&m%5==0) c=0;
	  if (!c) break;
	  }
     if (!c) break;
     }
if (c)
while (p/15625)
     {
     n+=15625;
     p=p-3900;
     m=n;
     while (m%5==0)
	  {
	  if (m%5==0) p--;
	  m/=5;
	  if (p==0&&m%5==0) c=0;
	  if (!c) break;
	  }
     if (!c) break;
     }
if (c)
while (p/3125)
     {
     n+=3125;
     p=p-776;
     m=n;
     while (m%5==0)
	  {
	  if (m%5==0) p--;
	  m/=5;
	  if (p==0&&m%5==0) c=0;
	  if (!c) break;
	  }
     if (!c) break;
     }
if (c)
while (p/625)
     {
     n+=625;
     p=p-152;
     m=n;
     while (m%5==0)
	  {
	  if (m%5==0) p--;
	  m/=5;
	  if (p==0&&m%5==0) c=0;
	  if (!c) break;
	  }
     if (!c) break;
     }
if (c)
while (p/125)
     {
     n+=125;
     p=p-28;
     m=n;
     while (m%5==0)
	  {
	  if (m%5==0) p--;
	  m/=5;
	  if (p==0&&m%5==0) c=0;
	  if (!c) break;
	  }
     if (!c) break;
     }
if (c)
while (p/5)
     {
     n+=25;
     p=p-4;
     m=n;
     while (m%5==0)
	  {
	  if (m%5==0) p--;
	  m/=5;
	  if (p==0&&m%5==0) c=0;
	  if (!c) break;
	  }
     if (!c) break;
     }
if (c)
  while (p)
     {
     n++;
     m=n;
     while (m%5==0)
	  {

	  if (m%5==0)
	    {
	    p--;
	 //   c5++;
	    }
	  m/=5;
	  if (p==0&&m%5==0) c=0;
	  if (!c) break;
	  }
     /*while (m%2==0)
	  {
	  if (m%2==0) c2++;
	  m/=2;
	  }
     if (!c) break; */
     }
/*while (c&&c2<c5)
     {
     n++;
     if (n%5==0) c=0;
     m=n;
     while (m%2==0)
	  {
	  if (m%2==0) c2++;
	  m/=2;
	  }
     }
long int s=1;
while (p>0)
     {
     n++;
     s=s*n;
     while (s%10==0)
	  {
	  p--;
	  s/=10;
	  }
     s=s%10;
     }
int c0=0;
while (n%10==0)
     {
     c0++;
     n/=10;
     }
long inv=0;*/
int c1,v[10];
if (!c) fprintf (fout,"%d",-1);
else
   {
   c1=0;
   while (n)
	{
	v[++c1]=n%10;
	n/=10;
	}
   for (i=c1;i>=1;i--) fprintf (fout,"%d",v[i]);
   }
//b=clock();
//cout<<(b-a)/CLK_TCK;
fclose(fin);
fclose(fout);
return 0;
}