Cod sursa(job #1460343)

Utilizator om6gaLungu Adrian om6ga Data 12 iulie 2015 13:34:17
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <stdio.h>
#include <math.h>
int p;

int nrcinci(long long n)
{
    int rez=0,i;
    for (i=14;i>=1;i--)
        rez+=n/(long long)pow(5,i);
    return rez;
}

int cauta(long long n1,long long n2)
{
     if (n2 - n1 <= 5 && (nrcinci(n1) < p) && (nrcinci(n2) > p))
         return -1;
     if (n1 == n2)
     {
        if (nrcinci(n1)==p)
           return n1;
        else
            return -1;
     }
     long long aux=(n1+n2)/2;
     if (nrcinci(aux)==p)
        return aux;
     else if (nrcinci(aux)<p)
          return cauta(aux+1,n2);
     else return cauta(n1,aux);
}



int main()
{
    FILE *in,*out;
    in=fopen("fact.in","r");
    out=fopen("fact.out","w");
    fscanf(in,"%d",&p);
    int n=floor(log(4*p+1)/log(5));
    int cc=0;
    long long N1=pow(5,n);
    long long N2=pow(5,n+1);
    long long rez;
    if (N2 - p < n+1)
    {
        fprintf(out,"%d",-1);
        fclose(out);
    }
    
    rez=cauta(0,N2);
    
    while (nrcinci(rez)==p)
    {
          rez--;
          cc++;
    }
    if (cc>0)
       rez++;
    if (p==0)
       rez=1;
    if (p==1)
       rez=5;
    fprintf(out,"%lld",rez);
    fclose(out);
    return 0;
}