Cod sursa(job #1496342)

Utilizator vlcmodanModan Valentin vlcmodan Data 4 octombrie 2015 19:32:20
Problema Cifra Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
int i,j,n,a[1024],s;
int b[1024];
char c;
int maxim(int a,int b)
{
    return a>b?a:b;
}
int suma(int n)
{   if(n==0)
        return 0;
    unsigned long long aux=n;
    for(int i=1;i<n%4+4;i++)
    {
            aux*=n;
            aux%=10;
    }
    return  aux%10;
}
int suma_directa(int n)
{
    n=n%100;
    int s=0,i=1;
    if(i>40)
    {
        s=8;
        i=40;
    }
    if(i>80)
    {
        s=6;
        i=80;
    }
    for(;i<=n;i++)
   {
       s+=suma(i);
       s%=10;
   }
   return s;
}
int suma_finala(int n)
{
    n=n%100;
    return b[n];
}
int main()
{
   freopen("cifra.in","r",stdin);
   freopen("cifra.out","w",stdout);
   scanf("%d",&n);
   scanf("%c",&c);
    scanf("%c",&c);
    for(i=1;i<=99;i++)
    {
        b[i]=(b[i-1]+suma(i))%10;
    }
   for(i=1;i<=n;i++)
   {

       do
   {
        a[++a[0]]=c-'0';
       scanf("%c",&c);

   }while(c!='\n');
   s=0;
   j=maxim(a[0]-2,1);
   for(;j<=a[0];j++)
    s=s*10+a[j];
    printf("%d\n",suma_finala(s));

   a[0]=0;
   scanf("%c",&c);
   }





//din 200 in 200 devine 0

  /* int u;
   for(u=0;u<=10000;u++)
   {
   for(i=0;i<4;i++)
   {
    for(j=0;j<=9;j++)
        printf("%d ",suma(i*10+j+40*u));

   }
   printf("\n");
   }*/

    return 0;
}