Cod sursa(job #1443399)

Utilizator cristina_borzaCristina Borza cristina_borza Data 27 mai 2015 21:08:43
Problema Cifra Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <fstream>
#include <cstring>

using namespace std;

ifstream f("cifra.in");
ofstream g("cifra.out");

char sir[500];

int a[500] , b[500] , mat[10][5] , n;

int rest(){
    int i , t = 0;
    for (i = a[0]; i > 0; i--)
        t = (t * 10 + a[i]) % 20;
    return t;
}

void impart(){
    int i ,t = 0;
    for (i = a[0]; i > 0; i--, t %= 20)
            a[i] = (t = t * 10 + a[i]) / 20;
    for (; a[0] > 1 && !a[a[0]]; a[0]--);

}

void inmult(){
    int i , t = 0 ;
    for (i = 1; i <= a[0] || t; i++, t /= 10)
        a[i] = (t += a[i] * 94) % 10;
    a[0] = i - 1;
}

void adun()
{
    int i, t = 0;
    for (i=1; i<=a[0] || i<=b[0] || t; i++, t/=10)
        a[i] = (t += a[i] + b[i]) % 10;
    a[0] = i - 1;
}

void solve(){
    int r , i , sum = 0;
    r = rest();
    for( i = 1 ; i <= r ; ++i){
        sum += mat[i % 10][i % 4];
    }

    impart();

    inmult();

    g<<(a[1] + sum) % 10 << '\n';
}

int main()
{
    int  j;
    f >> n;
    mat[1][0]=1,mat[1][1]=1,mat[1][2]=1,mat[1][3]=1;
    mat[2][0]=6,mat[2][1]=2,mat[2][2]=4,mat[2][3]=8;
    mat[3][0]=1,mat[3][1]=3,mat[3][2]=9,mat[3][3]=7;
    mat[4][0]=6,mat[4][1]=4,mat[4][2]=6,mat[4][3]=4;
    mat[5][0]=5,mat[5][1]=5,mat[5][2]=5,mat[5][3]=5;
    mat[6][0]=6,mat[6][1]=6,mat[6][2]=6,mat[6][3]=6;
    mat[7][0]=1,mat[7][1]=7,mat[7][2]=9,mat[7][3]=3;
    mat[8][0]=6,mat[8][1]=8,mat[8][2]=4,mat[8][3]=2;
    mat[9][0]=1,mat[9][1]=9,mat[9][2]=1,mat[9][3]=9;
    f.get();
    for(int i = 1; i <= n ; ++i){
        f.getline(sir,500);
        a[0]=strlen(sir);
        for(j = a[0] - 1; j >= 0 ; --j)
        {
            a[a[0] - j] = sir[j] - '0';
        }
        solve();
    }
    return 0;
}