Cod sursa(job #384944)

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

long int pow5[12] = {5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, 48828125};

long int nrzeros(long int n)
{
     long int q = (long int)(log((long double)n)/log(5));
     long int nr = 0;
     for (int i = 0; i < q; i++)
     {
         nr += (long int)(n/pow5[i]);
     }
     return nr;
}

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

    fprintf(fout, "%ld", (long int)N);
    
    fclose(fin);
    fclose(fout);
    
    return 1;
}