Cod sursa(job #292938)

Utilizator vlasceanuVlasceanu Razvan vlasceanu Data 31 martie 2009 20:23:56
Problema Factorial Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb

/*
25                 6
125               31
625               156
3125             781
15625           3906
78125           19531
390625         97656
1953125       488281
9765625       2441406
48828125     12207031
244140625   61035156
1220703125 305175781
*/

#include <cstdlib>
#include <iostream>
#include <limits>
#include <math.h>
#include <fstream.h>

typedef unsigned long int uli;

using namespace std;

unsigned long int cp[] = {0,5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125};
uli ex[] = {0,1,6,31,156,781,3906,19531,97656,488281,2441406,12207031,61035156,305175781}; 

/*
unsigned long int Ev(unsigned long int p)
{
if(5*p<25) return 5*p;
uli rez = 5*p;
for(uli i=1;i<=5*p;i++)
{
  if(i*25<5*p)
  {
    uli j=1;
    uli ii=i;
    while(ii%5==0)
    {
     j++;
     ii/=5;
    }
    rez-=5*j;
  }
  else return rez;
}
return rez;
}*/



int main(int argc, char *argv[])
{
    ifstream fin("fact.in");
    long unsigned int pp;
    fin >> pp;
    uli rez=0;
    for(int i=13;i>=1;i--)
    {
      if(pp>=ex[i])
      {
        rez+=(pp/ex[i])*i;
        pp=pp%ex[i];
      }      
    }
    ofstream fout("fact.out");   
    fout<<cp[rez];
    fin.close();
    fout.close();
    return EXIT_SUCCESS;
}