Cod sursa(job #114582)

Utilizator razvanelu99Razvan Andrus razvanelu99 Data 14 decembrie 2007 22:14:48
Problema Cifra Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.64 kb
#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[150];
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;
			}

   //s1+=intreg(a[n]);
   int r=0,r1,r2;
   if (n==0) r=intreg(a[n]);
   else r=intreg(a[n-1])*10+intreg(a[n]);
   r1=r%10;
   r2=r/10;
   s=(s+(r2*2*6))%10;
   if (r1>=4&&r1<6) s=(s+6)%10;
   if (r1>=6) s=(s+2)%10;

   if (r%10) s=(s+1)%10;
   if (r%20)
     {
     int h=r%20;
     if (h==18) s=(s+1)%10;
     if (h==17) s=(s+7)%10;
     if (h==12) s=(s+7)%10;
     if (h==11||h==10||h==9) s=(s+1)%10;
     if (h==7) s=(s+4)%10;
     if (h==6||h==5||h==4||h==3) s=(s+1)%10;
     if (h==2) s=(s+4)%10;
     if (h>=5&&h<15) s=(s+5)%10;
     }
   /*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;
}