Cod sursa(job #133335)

Utilizator AndreyPAndrei Poenaru AndreyP Data 8 februarie 2008 11:58:32
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<stdio.h>
int main()
{
	unsigned long z,x1,x2,fx1,fx2,a,m,fm,c;
	freopen("fact.in","r",stdin);
	freopen("fact.out","w",stdout);
	scanf("%lu",&z);
	if(z==0)
		printf("1\n");
	else
	{
		x1=5;
		fx1=1;
		x2=400000015;
		fx2=100000000;
		while(x1<x2)
		{
			m=(x1+x2)/2;
			fm=0;
			a=5;
			while(a<=m)
			{
				fm=fm+m/a;
				a=a*5;
			}
			if(z<=fm)
			{
				x2=m;
				fx2=fm;
			}
			else
			{
				x1=m+1;
				a=x1;
				c=0;
				while(a%5==0)
				{
					c++;
					a=a/5;
				}
				fx1=fm+c;
			}
		}
		x1=x1-x1%5;
		fx1=0;
		a=5;
		while(a<=x1)
		{
			fx1=fx1+x1/a;
			a=a*5;
		}
		if(fx1==z)
			printf("%lu\n",x1);
		else
			printf("-1\n");
	}
	return 0;
}