Cod sursa(job #1027229)

Utilizator mucenic_b101Bogdan Mucenic mucenic_b101 Data 12 noiembrie 2013 16:54:37
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>
#include <iostream>

using namespace std;

long long p10fact( long long nr ) {
    long long p = 5, put = 0;
    while( p <= nr ) {
        put += ( nr / p );
        p *= 5;
    }

    return put;

}

int main () {

    freopen( "fact.in" , "r", stdin );
    freopen( "fact.out", "w", stdout );

    long long p;
    long long pas, poz, minim = 99999999999999999, k;

    scanf( "%I64d", &p );
    poz = 0;
    pas = 1;
    pas <<= 62;
    while( pas ) {
        k = p10fact( poz + pas );
        if( k <= p ) {
            poz += pas;
            if( k == p && poz < minim )
                minim = poz;
        }

        pas >>= 1;
    }

    while( p10fact( minim - 1 ) == p && minim >= 2 )
        --minim;
    if( p10fact( poz ) == p )
        printf( "%I64d\n", minim );
    else
        printf( "-1\n" );

   // cout<<p10fact( 17 );

    return 0;

}