Cod sursa(job #1080188)

Utilizator impulseBagu Alexandru impulse Data 12 ianuarie 2014 14:39:43
Problema Factorial Scor 15
Compilator c Status done
Runda Arhiva de probleme Marime 0.92 kb
//
//  main.c
//  fact2
//
//  Created by Alexandru Bâgu on 1/12/14.
//  Copyright (c) 2014 Alexandru Bâgu. All rights reserved.
//

#include <stdio.h>

int powOf5(int n)
{
    int p = 0;
    if(n % 5 == 0 && n > 0	)
        return p = 1 + powOf5(n / 5);
    return p;
}

int fives(int n)
{
    int k = 0;
    while(n > 4) k += powOf5(n--);
    return k;
}

int isValid(int n, int p)
{
    int k = fives(n);
    if(p > k) return 1;
    if(p == k) return 0;
    return -1;
}

int main(int argc, const char * argv[])
{
    freopen("fact.in", "r", stdin);
    freopen("fact.out", "w", stdout);
    int p;
    scanf("%d", &p);
    int max = 5 * p;
    int k = 1 << 30, i = 0;
    while(k > 0)
    {
        if(k + i <= max)
            if(isValid(k + i, p) >= 0)
                i += k;
        k >>= 1;
    }
    int pk = fives(i);
    while(pk == fives(i - 1) && i > 0)
        i--;
    if(i == 0) i = 1;
    printf("%d", i);
    return 0;
}