Pagini recente » Cod sursa (job #1401014) | Cod sursa (job #64718) | Cod sursa (job #2313271) | Cod sursa (job #1208077) | Cod sursa (job #83183)
Cod sursa(job #83183)
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
# define MAX 30000
int T,N;
int *saved;
void cifra(FILE*,int);
int ultcifra(int,int);
int main (){
FILE *in=fopen("cifra.in","r");
FILE *out=fopen("cifra.out","w");
fscanf(in,"%d",&T);
int i;
saved=(int*)malloc(MAX*sizeof(int));
for (i=0;i<MAX;i++)
saved[i]=0;
clock_t a,b;
a=clock();
for (i=1;i<=T;i++){
fscanf(in,"%d",&N);
cifra(out,N);
}
b=clock();
int time=(b-a);
fprintf(stdout,"%d",time);
fclose(in);
fclose(out);
free(saved);
return 0;
}
void cifra(FILE *out,int nr){
int cifra=0;
int i=0,j;
for (i=nr;i>=1;i--)
if(saved[i]!=0)
break;
cifra=saved[i];
printf("%d->",cifra);
for (j=i+1;j<=nr;j++){
cifra+=ultcifra(j%10,j);
cifra%=10;
}
fprintf(out,"%d\n",cifra);
saved[nr]=cifra;//am salvat ultima cifra
}
int ultcifra(int nr,int pow){
if(nr==0||nr==1||nr==5||nr==6)
return nr;
else if(nr==4)
switch(pow%2){
case 0:return 6;break;
case 1:return 4;break;
}
else if(nr==9)
switch(pow%2){
case 0:return 1;break;
case 1:return 9;break;
}
else if(nr==3)
switch(pow%4){
case 0:return 1;break;
case 1:return 3;break;
case 2:return 9;break;
case 3:return 7;break;
}
else if(nr==2)
switch(pow%4){
case 0:return 6;break;
case 1:return 2;break;
case 2:return 4;break;
case 3:return 8;break;
}
else if(nr==8)
switch(pow%4){
case 0:return 6;break;
case 1:return 8;break;
case 2:return 4;break;
case 3:return 2;break;
}
else if(nr==7)
switch(pow%4){
case 0:return 1;break;
case 1:return 7;break;
case 2:return 9;break;
case 3:return 3;break;
}
return 0;
}