Cod sursa(job #313746)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 9 mai 2009 17:08:49
Problema Factorial Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>   
  
long v[14][3];   
  
long BS2(long x)   
{   
    int lo, hi, mid, last = 0;   
  
    for (lo = 1, hi = 12; lo <= hi; )   
    {   
    mid = lo + (hi-lo) / 2;   
    if (v[mid][2] <= x) last = mid, lo = mid+1;   
    else hi = mid-1;   
    }   
    return last;   
}   
  
int main()   
{   
 freopen("fact.in","r",stdin);   
 freopen("fact.out","w",stdout);   
 long p,n=0,i,x;   
 v[1][1]=25;   
 v[1][2]=6;   
 for (i=2;i<13;i++) {v[i][1]=v[i-1][1]*5;v[i][2]=v[i-1][1]+v[i-1][2];};   
 scanf("%ld",&p);   
  
 if (p!=0)   
 {   
  
 x=BS2(p);   
 if (p>6)   
 {if ((p<v[x+1][2])&&(p>v[x+1][2]-x-2)) n=-1;}   
 else   
 {   
 do   
 {   
  x=BS2(p);   
  n=n+v[x][1];   
  p=p-v[x][2];   
 }   
 while (p>5);   
  
 if (p==5) n=-1;
 else n=n+5*p;   
 }   
 }   
 else n=0;   
  
 printf("%ld",n);   
 return 0;   
}