Cod sursa(job #1460360)

Utilizator om6gaLungu Adrian om6ga Data 12 iulie 2015 14:39:57
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
#include <math.h>

long long _pow(int a, int b)
{
    long long rez = 1;
    while (b)
    {
          rez *= a;
          b--;
    }     
    return rez;
}

int main()
{
    long long N1, N, rez = 0, k, delta;
    int p, n, c;
    FILE *in,*out;

    in=fopen("fact.in","r");
    out=fopen("fact.out","w");
    fscanf(in,"%d",&p);
    fclose(in);

    if (p <= 1)
       rez=pow(5, p);

    if (!rez)
    {
        n = floor(log(4*p+1)/log(5));
        while (p && n)
        {
            k = _pow(5,n);
            delta = (k-1)/4L;
            c = 1;
            while (c < 5 && p - delta >= 0)
            {
                //printf("p=%d k=%d delta=%d\n", p, k, delta);
                p -= delta;
                rez += k;
                if (!p)
                   goto done; 
                c++;
            }
            n--;
        }
        if (p)
            rez = -1;
    }
    
    done:

    //printf("%lld",rez);
    //getchar();

    fprintf(out,"%lld",rez);
    fclose(out);
    return 0;
}