Cod sursa(job #517131)

Utilizator Athena99Anghel Anca Athena99 Data 27 decembrie 2010 21:02:50
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>

long v[14][3];

long FC(long x)
{
    int lo,hi,mid,last=0;
    for (lo =1,hi=12;lo<=hi;)
    {
        mid=lo+(hi-lo)/2;
        if (v[mid][2]<=x) last=mid,lo=mid+1;
        else hi=mid-1;
    }
    return last;
}

int main()
{
    freopen("fact.in","r",stdin);
    freopen("fact.out","w",stdout);
    long p,n=0,i,x;
    v[1][1]=25;
    v[1][2]=6;
    for (i=2;i<13;i++) {v[i][1]=v[i-1][1]*5;v[i][2]=v[i-1][1]+v[i-1][2];};
    scanf("%ld",&p);
    x=FC(p);
    if (p!=0)
    {
        if (p>6)
        {
            if ((p<v[x+1][2])&&(p>v[x+1][2]-x-2)) {n=-1;p=0;};
            do
            {
                x=FC(p);
                n=n+v[x][1];
                p=p-v[x][2];
            }
            while (p>5);
        }
        if (p==5) n=-1;
        else n=n+5*p;
    }
    else n=1;
    printf("%ld",n);
    return 0;
}