Cod sursa(job #384955)

Utilizator remusmpRemus MP remusmp Data 21 ianuarie 2010 21:03:15
Problema Factorial Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

long long nrzeros(long long);

int main()
{
    FILE* fin = fopen("factorial.in", "r");
    FILE* fout = fopen("factorial.out", "w");
    long long P = 0;
    fscanf(fin, "%ld", &P);
    
    long long N = 5 * P;
    long long Z = nrzeros(N);
    long long D = 0;
    long long D1 = 0;
    long long D2 = 1;
    
    int done = 0;
    
    while (!done)
    {
          if (P == Z || D2 == D)
          {
                if (D2 == D)
                   N = -1;
                break;
          }
          D2 = D1;
          D1 = D;
          D = Z - P;
          N -= D*5;
          
          Z = nrzeros(N);
    }

    fprintf(fout, "%ld", N);
    
    fclose(fin);
    fclose(fout);
    
    return 0;
}
  
long long nrzeros(long long n)
{
     long long pow5[12] = {5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, 48828125};
     long long q = (long int)(log((long double)n)/1.6094);
     long long nr = 0;
     for (int i = 0; i < q; i++)
     {
         nr += (long long)(n/pow5[i]);
     }
     return nr;
}