Cod sursa(job #196396)

Utilizator MciprianMMciprianM MciprianM Data 26 iunie 2008 11:23:04
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<fstream>
using namespace std;
int fi(long long x){
  int sum=0, pow, _5pow, ant,cur;//ink o var
  pow=0; _5pow=1;
  while(_5pow<=x){
    ++pow;
    _5pow*=5;
  }
  --pow;
  _5pow/=5;
  ant=0;
  while(pow){
    cur=x/_5pow;
    cur-=ant;
    ant+=cur;
    sum+=cur*pow;
    pow--;
    _5pow/=5;
  }
  return sum;
}
long long bs(int p, long long MAX){
  long long st, dr, m, valf;
  st=MAX>>1;dr=MAX;
  if(fi(dr)==p)  return dr;
  while(st<dr){
    m=(st+dr)/2;
    valf=fi(m);
    if(p==valf)   return m;
    if(valf>p)    dr=m-1;
    else  st=m+1;
  }
  return -1;
}
int main(){
  int p;
  ifstream f("fact.in");
  f>>p;
  f.close();
  ofstream g("fact.out");
  long long MAX;
  for( MAX=1 ;fi(MAX)<p;MAX<<=1);
  long long r=bs(p, MAX);
  if(r!=-1){
    while(r&&fi(r)==p) r--;
    ++r;
  }
  g<<r<<'\n';
  g.close();
  return 0;
}