Cod sursa(job #286171)

Utilizator Sorin_IonutBYSorynyos Sorin_Ionut Data 23 martie 2009 16:05:23
Problema Cifra Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define IN "cifra.in"
#define OUT "cifra.out"
#define max 128
#define mx 8

FILE *fin=fopen(IN,"r");
FILE *fout=fopen(OUT,"w");

int m[max];
int t,n,l;
char s[max];
char a[mx];

void preprocesare();
inline int calcul(int);
inline int ultcifra(int,int);

int main()
{
 preprocesare();

 fscanf(fin,"%d",&t);
 while(t)
 {
  --t;
  fscanf(fin,"%s",s);
  l=strlen(s);

  if(l==1)
  {
   a[0]=s[0];
   a[1]=0;
   n=atoi(a);
  }
  else
   if(l==2)
   {
    a[0]=s[1];
    a[1]=s[0];
    a[2]=0;
    n=atoi(a);
   }
   else
    if(l>=3)
    {
     a[0]=s[l-3];
     a[1]=s[l-2];
     a[2]=s[l-1];
     a[3]=0;
     n=atoi(a);
    }

  fprintf(fout,"%d\n",calcul(n));
 }
 fclose(fin);
 fclose(fout);

 return 0;
 }

 inline int calcul(int val)
 {
  int r=val%100;
  int c=val/100;
  return (m[r]+c*m[100])%10;
 }

 void preprocesare()
 {
  int i;

  for(i=1;i<=100;i++)
   m[i]=(m[i-1]+ultcifra(i%10,i%4))%10;
 }

 inline int ultcifra(int val,int p)
 {
  int i,r=1;

  if(p==0)
   p=4;

  for(i=1;i<=p;i++)
   r*=val;

  return r%10;
 }