Cod sursa(job #332840)

Utilizator GagosGagos Radu Vasile Gagos Data 20 iulie 2009 15:46:10
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<cstdio>   
  
using namespace std;   
  
long long i, pow5_p[14], pow5[14], p, sol = 1, p1, s;   
  
int main()   
{   
    freopen("fact.in","r",stdin);   
    freopen("fact.out","w",stdout);   
       
    scanf("%lld", &p);   
       
    if(p == 0)   
    {   
        printf("1\n");   
        return 0;   
    }   
    pow5[0] = 1;   
    for(i = 1; i <= 13; ++i)   
    {   
        pow5_p[i] = pow5_p[i - 1] + sol;   
        sol *= 5;   
        pow5[i] = sol;   
    }   
    sol = 0;   
    p1 = p;   
	for(i = 13; i >= 1; --i)
	{
		sol += (p1 / pow5_p[i]) * pow5[i];
		p1 %= pow5_p[i];
	}
    p1 = sol;
	s = 0;
	while(p1)
	{
		s += (p1 / 5);
		p1 /= 5;
	}
	
	if(s == p)
		printf("%lld\n", sol);
	else
		printf("-1\n");
	
    return 0;   
}