#include<stdio.h>
int stringlen (char *sir) //strlen substitute
{
int i=0;
while (sir[i])
i++;
return i;
}
void invers (char *sir, int len) //strrev substitute
{
int i, man;
for (i=0; i<=len/2; i++)
{
man=sir[i];
sir[i]=sir[len-i];
sir[len-i]=man;
}
}
int citire (char *sir)
{
int i, len;
len=stringlen(sir)-2;
for (i=0; i<=len; i++)
sir[i]-='0';
invers (sir, len);
return len; //pozitia ultimei cifre si nu lungimea numarului
}
void decrement (char *sir, int *len)
{
int i=0;
sir[i]--;
while (sir[i]==-1)
{
sir[i]=9;
i++;
sir[i]--;
}
if ( i==(*len) && sir[i]==0 )
(*len)--;
}
int construct4 (char *sir) //ultimele 2 cifre pentru verificare restului la 4
{
return (sir[0]+sir[1]*10);
}
int main()
{
FILE *in, *out;
char n[102];
int valori[10][4]={{0},{0},{6,2,4,8},{1,3,9,7},{6,4,6,4},{0},{0},{1,7,9,3},{6,8,4,2},{1,9,1,9}};
int ocifra[10]={0, 1, 4, 7, 6, 5, 6, 3, 6, 9}; //cifrele de la 1 la 9
int i, L, ucif, putere, scif=0, nr, T, contor;
in=fopen("cifra.in", "r");
out=fopen("cifra.out", "w");
fscanf(in, "%d", &T);
for (contor=1; contor<=T; contor++)
{
fgets( n,101,in );
scif=0;
L=citire(n);
while (L>1) //cat timp numarul are minim 2 cifre, ca sa mearga cu construct4
{
ucif=n[0];
if (ucif==0 || ucif==1 || ucif==5 || ucif==6)
scif+=ucif;
else
{
putere=construct4(n)%4;
scif+=valori[ucif][putere];
}
scif=scif%10;
decrement(n,&L);
}
nr=n[0];
for (i=1; i<=nr; i++)
scif+=ocifra[i];
scif=scif%10;
fprintf(out, "%d", scif);
}
return 0;
}