Pagini recente » Cod sursa (job #2589946) | Monitorul de evaluare | Cod sursa (job #363555) | Cod sursa (job #334429) | Cod sursa (job #114300)
Cod sursa(job #114300)
#include<stdio.h>
int v[11][11],x[10];
int intreg(char a)
{
switch (a)
{
case '0':return 0;break;
case '1':return 1;break;
case '2':return 2;break;
case '3':return 3;break;
case '4':return 4;break;
case '5':return 5;break;
case '6':return 6;break;
case '7':return 7;break;
case '8':return 8;break;
case '9':return 9;break;
}
return 0;
}
char caracter(int a)
{
switch (a)
{
case 0:return '0';break;
case 1:return '1';break;
case 2:return '2';break;
case 3:return '3';break;
case 4:return '4';break;
case 5:return '5';break;
case 6:return '6';break;
case 7:return '7';break;
case 8:return '8';break;
case -1:return '-1';break;
}
return 0;
}
int main()
{
FILE *fin,*fout;
fin= fopen ("cifra.in","r");
fout= fopen ("cifra.out","w");
char a[40],b[40];
int t;
fscanf(fin,"%d",&t);
int s,n;
x[2]=4;v[2][0]=6;v[2][1]=2;v[2][2]=4;v[2][3]=8;
x[3]=4;v[3][0]=1;v[3][1]=3;v[3][2]=9;v[3][3]=7;
x[4]=2;v[4][0]=6;v[4][1]=4;
x[7]=4;v[7][0]=1;v[7][1]=7;v[7][2]=9;v[7][3]=3;
x[8]=4;v[8][0]=6;v[8][1]=8;v[8][2]=4;v[8][3]=2;
x[9]=2;v[9][0]=1;v[9][1]=9;
int m;
for (int i=1;i<=t;i++)
{
fscanf (fin,"%s",&a);
s=0;
for (int j=1;;j++) if (a[j]=='\0')
{
n=j-1;
break;
}
while (a[0]!='\0')
{
if (a[n]=='0'||a[n]=='1'||a[n]=='5'||a[n]=='6') s+=(intreg(a[n]))%10;
if (a[n]=='4'||a[n]=='9') s+=(v[intreg(a[n])][intreg(a[n])%2])%10;
if (a[n]=='2'||a[n]=='3'||a[n]=='7'||a[n]=='8')
{
int p=0;
if (n>=1) p=p+intreg(a[n-1])*10+intreg(a[n]);
if (n==0) p=intreg(a[n]);
s=(s+(v[intreg(a[n])][p%4]))%10;
}
m=n;
while (a[m]=='0')
{
if (a[m-1]>'1')
{
a[m]='9';
a[m-1]=caracter(intreg(a[m-1])-1);
}
else
{
m--;
}
}
if (m==0&&a[m]=='1')
{
a[n]='\0';
n--;
for (int h=0;h<=n;h++) a[h]='9';
}
else a[n]=caracter(intreg(a[n])-1);
}
fprintf (fout,"%d\n",s);
}
return 0;
}