Pagini recente » Cod sursa (job #1875732) | Cod sursa (job #19808) | Profil StarGold2 | Cod sursa (job #3124294) | Cod sursa (job #526737)
Cod sursa(job #526737)
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char caractere[251];
int cifre[251];
int nr_cifre;
}
numar;
int valid(numar n)
{
if(n.nr_cifre>1)
{
return 1;
}
if(n.cifre[0]==0)
{
return 0;
}
return 1;
}
numar scadere(numar n)
{
int i;
n.cifre[n.nr_cifre-1]--;
for(i=n.nr_cifre-1;i>=0;i--)
{
if(n.cifre[i]<0)
{
n.cifre[i]=9;
n.cifre[i-1]--;
}
else
{
break;
}
}
if(n.nr_cifre>1)
{
if(n.cifre[0]==0)
{
for(i=0;i<n.nr_cifre;i++)
{
n.cifre[i]=n.cifre[i+1];
}
n.nr_cifre--;
}
}
return n;
}
int putere(int n, int p)
{
int i, uc;
i=1;
uc=n;
if(p==0)
{
for(i=1;i<4;i++)
{
uc=(uc*n)%10;
}
}
else
{
for(i=1;i<p;i++)
{
uc=(uc*n)%10;
}
}
return uc;
}
int main()
{
FILE *fin, *fout;
fin=fopen("date.in", "r");
fout=fopen("date.out", "w");
int k, uc, uc_final, d;
numar n;
fscanf(fin, "%d", &k);
while(k>0)
{
k--;
uc_final=0;
fscanf(fin, "%s", &n.caractere);
n.nr_cifre=0;
while(((int)n.caractere[n.nr_cifre]>=(int)'0')&&((int)n.caractere[n.nr_cifre]<=(int)'9'))
{
n.cifre[n.nr_cifre]=(int)n.caractere[n.nr_cifre]-(int)'0';
n.nr_cifre++;
}
while(valid(n)==1)
{
switch(n.cifre[n.nr_cifre-1])
{
case 1: uc=1;
break;
case 5: uc=5;
break;
case 6: uc=6;
break;
default:if(n.nr_cifre>1)
{
d=n.cifre[n.nr_cifre-1]+10*n.cifre[n.nr_cifre-2];
}
else
{
d=n.cifre[n.nr_cifre-1];
}
uc=putere(n.cifre[n.nr_cifre-1], d%4);
break;
}
uc_final=(uc_final+uc)%10;
n=scadere(n);
}
fprintf(fout, "%d\n", uc_final);
}
return 0;
}