Cod sursa(job #2720562)

Utilizator pasqualePascale Radu-Ioan pasquale Data 10 martie 2021 23:33:56
Problema Factorial Scor 95
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h>
#include <math.h>

long long fact(int p, long long lower, long long upper);
int sumare(long long n);

int main(){
    int p;
    long long upper=10000000000;
    FILE *f;
    f=fopen("fact.in", "r");
    fscanf(f, "%d", &p);
    fclose(f);
    f=fopen("fact.out", "w");
    fprintf(f, "%lld", fact(p, 4*p, upper));
    fclose(f);
    return 0;
}

long long fact(int p, long long lower, long long upper){
    int sum;
    long long n=(lower+upper)/2;
    sum=sumare(n);
    if(p == 0){
        return 1;
    }
    if(n+1 == upper && sum>p){
        return -1;
    }
    if((sum == p)){
        if(n>1){
            while(n%5!=0){
                n--;
            }
        }
        return n;
    }
    if(sum > p){
        return fact(p, lower, n);
    }
    else{
        return fact(p, n, upper);
    }
}

int sumare(long long n){
    int i=1, rez=0;
    while(n>=pow(5,i)){
        rez+=floor(n/pow(5,i));
        i++;
    }
    return rez;
}