Cod sursa(job #2647604)

Utilizator razvan.maziluMazilu Razvan razvan.mazilu Data 5 septembrie 2020 14:25:05
Problema Factorial Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <stdio.h>
#include <stdlib.h>
#define NMax 1000000001

FILE *f, *g;
int P;

long long findTrailingZeros(long long n)
{
    // Initialize result
    long long count = 0;

    // Keep dividing n by powers of
    // 5 and update count
    for (long long i = 5; n / i >= 1; i *= 5)
        count += n / i;

    return count;
}

int main()
{
    f = fopen("fact.in", "r");
    g = fopen("fact.out", "w");

    if(f == NULL)
    {
       perror("Eroare fisier citire");
       exit(1);
    }


    if(g == NULL)
    {
       perror("Eroare fisier scriere");
       exit(1);
    }

    fscanf(f, "%d", &P);

    /*if(P > 100000000)
    {
       fprintf(g, "%d", -1);
       exit(1);
    }

    int ct = 0;
    long long N = 0;

    if(P == 0)
      N = 1;
    else
    {
      ct = findTrailingZeros(N);
      while(ct < P)
      {
        N += 5;
        ct = findTrailingZeros(N);
      }
    }


    if(ct == P)
     fprintf(g, "%ld", N);
    else
     fprintf(g, "%d", -1);
    */

    long long st, dr, N;
    int Solution = -1;

    st = 1;
    dr = NMax;

    while(st <= dr)
    {
        N = (dr + st) / 2;
        int ct = findTrailingZeros(N);
        if(ct == P)
        {
            Solution = N;
            dr = N - 1;
        }
        else if(ct < P)
            st = N + 1;
        else
            dr = N - 1;
    }

    fprintf(g, "%d", Solution);

    fclose(f);
    fclose(g);

    return 0;
}