Cod sursa(job #129564)
| Utilizator | Data | 29 ianuarie 2008 18:40:18 | |
|---|---|---|---|
| Problema | Factorial | Scor | 90 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.71 kb |
#include <stdio.h>
long p,low,mid,high,p5,nr0;
int main(){
freopen("fact.in","r",stdin);
freopen("fact.out","w",stdout);
scanf("%ld",&p);
low=1;
high=2000000000;
while (low<high){
mid = (low + high)/2;
p5=5;nr0=0;
while (p5<mid){
nr0+=mid/p5;
p5*=5;
}
if (nr0 < p){
low = mid + 1;
}
else
high = mid;
}
p5=5;nr0=0;
while (p5<low){
nr0+=low/p5;
p5*=5;
}
while (low%5)low--;
if (low <2000000000 && nr0==p)
printf("%ld\n",low);
else printf("-1\n");
return 0;
}
