Cod sursa(job #760709)

Utilizator repp4raduRadu-Andrei Szasz repp4radu Data 22 iunie 2012 17:51:23
Problema Cifra Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <fstream>
#include <cstring>
#include <stdlib.h>
#define MAX 105

using namespace std;

int last[MAX], n;
char sir[MAX];

int lastDigit(int nr)
{
    switch(nr % 10)
    {
        case 0: return 0;
        case 1: return 1;
        case 2: switch(nr % 4) {case 0: return 6; case 1: return 2; case 2: return 4; case 3: return 8;}
        case 3: switch(nr % 4) {case 0: return 1; case 1: return 3; case 2: return 9; case 3: return 7;}
        case 4: switch(nr % 2) {case 0: return 6; case 1: return 4;}
        case 5: return 5;
        case 6: return 6;
        case 7: switch(nr % 4) {case 0: return 1; case 1: return 7; case 2: return 9; case 3: return 3;}
        case 8: switch(nr % 4) {case 0: return 6; case 1: return 8; case 2: return 4; case 3: return 2;}
        case 9: switch(nr % 2) {case 0: return 1; case 1: return 9;}
    }
}

void preprocess()
{
    last[0] = 0;
    for(int i = 1; i <= 100; i++)
        last[i] = (last[i - 1] + lastDigit(i)) % 10;
}

int getLastDigits(char* sir)
{
    int lgt = strlen(sir);
    if(lgt <= 2) return atoi(sir);
    else return ((sir[lgt - 2] - '0') * 10 + (sir[lgt - 1] - '0'));
}

int main()
{
    ifstream in("cifra.in");
    ofstream out("cifra.out");
    preprocess();
    in>>n; in.get();
    while(n--)
    {
        in.getline(sir, MAX);
        out<<last[getLastDigits(sir)]<<'\n';
    }
    in.close();
    out.close();
    return 0;
}