Cod sursa(job #155169)

Utilizator ZozelZozo Zozo Zozel Data 11 martie 2008 19:34:22
Problema Factorial Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<stdio.h>
#include<math.h>

int main(){
int P,max,zeros,minus,amax0,cupramax,i,cupr=0;
float amax;
FILE *fin=fopen("fact.in","r");
FILE *fout=fopen("fact.out","w");
fscanf(fin,"%d",&P);
max=P*5;
amax=max;

 while(floor(amax)>4){
 cupr++;
 amax/=5;
 }//calculam cea mai mare putere a lui 5 ce se cuprinde in max

zeros=0;
for(i=2;i<cupr;i++){
 zeros+=(floor(max/pow(5,i)))*(i-1) - floor((max/pow(5,i)/5))*(i-1);
 }
zeros+=(cupr-1)*(max/pow(5,cupr))+P;//calculam numarul de zerouri in plus
if(zeros==0) fprintf(fout,"%d",max);
else{
 minus=0;
 while(minus<zeros-P){
  amax0=max;
   while(amax0%5==0){
    amax0/=5;
    minus++;
   }
 max-=5;
}
 if(max!=0){
  if(minus!=zeros-P) fprintf(fout,"%d",-1);
   else fprintf(fout,"%d",max);
  }
   else fprintf(fout,"%d",1);
 }
fclose(fin);
fclose(fout);
return 0;
}