Pagini recente » Cod sursa (job #1814048) | Cod sursa (job #1745894) | Cod sursa (job #1605337) | Cod sursa (job #411268) | Cod sursa (job #268771)
Cod sursa(job #268771)
#include<stdio.h>
//#include<conio.h>
inline unsigned long long getfive(unsigned long long x)
{
unsigned long n=0;
while(x%5==0)
{
n++;
x/=5;
}
return n;
}
int main()
{
unsigned long long nr,in=0,out=0,i;
unsigned long long put5[]={25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125};
FILE *fi,*fo;
fi=fopen("fact.in","r");
fo=fopen("fact.out","w");
fscanf(fi,"%llu",&nr);
nr*=5;
if(!nr)
{
fprintf(fo,"1");
return 0;
}
for(i=0;i<=11;i++)if(put5[i]<nr)
{
in+=nr/put5[i];
//printf("testam pt i=%lu; acesta aduce %lu 5-uri. in devine %lu\n",i,aux,in);getch();
while(out<in)
{
//printf("scoatem %lu. pierdem 1 5-uri(out:%lu). nr devine %lu\n",nr,out+1,nr-5);getch();
out+=getfive(nr);
nr-=5;
}
}
//printf("terminat. nr este %lu; in:%lu out:%lu",nr,in,out);getch();
if(in!=out)fprintf(fo,"-1");
else fprintf(fo,"%llu",nr);
return 0;
}