Pagini recente » Cod sursa (job #1553226) | Cod sursa (job #348345) | Cod sursa (job #2606827) | Cod sursa (job #1170550) | Cod sursa (job #83095)
Cod sursa(job #83095)
# include <stdio.h>
# include <string.h>
# include <math.h>
# include <stdlib.h>
int P,result=0,aux;
int nrdezerodelacoada(int);
int multdeputerede5(int,int);
int main(){
FILE *in=fopen("fact.in","r");
fscanf(in,"%d",&P);
fclose(in);
if(P==0)
result=1;
while(P>0){
aux=result;
if(P==1){
P--;
result+=5;
}
else if(P==2){
P--;
result+=10;
}
else if(P==3){
P-=3;
result+=15;
}
else {
result+=20;
P-=3;
}
P-=nrdezerodelacoada(result);
P-=multdeputerede5(aux,result);
}
if(P<0)
result=-1;
FILE *out=fopen("fact.out","w");
fprintf(out,"%d",result);
fclose(out);
return 0;
}
int nrdezerodelacoada(int nr){
int i;
for (i=1;i<=9;i++){//pana la 1 miliard
int p=pow(10,i);
if( nr % p )
return i-1;
}
return 0;
}
int mulde5(int nr){
int i;
for (i=1;i<=12;i++){//pana la 1 miliard
int p=pow(5,i);
if( nr % p )
return i-1;
}
return 0;
}
int multdeputerede5(int nr1,int nr2){
int a;
float aux1,aux2;
float res1,res2;
for (a=1;a<=3;a++){
aux1=nr1/a;
aux2=nr2/a;
int aaa=mulde5(nr2);
if(aaa>1)
return aaa;
if(aux1==0)
res1=0;
else
res1=log(aux1)/log(5);
res2=log(aux2)/log(5);
int pp=res1;
if(pp && pp+1<=res2)
return pp;
}
return 0;
}