Cod sursa(job #114041)

Utilizator tazuAndrei A. tazu Data 12 decembrie 2007 15:25:40
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<stdio.h>
int a[113],b[113],p,m;
void init(int p){
	a[0]=5;
	b[0]=1;
	for(m=1;b[m-1]<=p;m++){
		a[m]=a[m-1]*5;
		b[m]=a[m-1]+b[m-1];
	}
}
int caut(int x){
	int p=0,u=m,mm;
	while(p<u){
		mm=(p+u)>>1;
		if(x<=b[mm])
			u=mm;
		else
			p=mm+1;
	}
	if(b[p]>x)
		--p;
	return p;
}	
int calcul(int p){
	int s=0,poz;
	while(p){
		poz=caut(p);
		s+=p/b[poz]*a[poz];
		p%=b[poz];
	}
	return s;
}
int main(){
	freopen("fact.in","r",stdin);
	freopen("fact.out","w",stdout);
	int p;
	scanf("%d",&p);
	if(p==0){
		printf("1\n");
		fclose(stdin);
		fclose(stdout);
		return 0;
	}
	init(p);
	/*
	for(int i=1;i<=p;++i)
		printf("%d,%d,%d",i,a[i],b[i])*/
	int x=calcul(p) , y=calcul(p+1);
	if(x==y)
		printf("-1\n");
	else
		printf("%d\n",x);
	fclose(stdin);
	fclose(stdout);
	return 0;
}