Cod sursa(job #2428902)

Utilizator Anakin1001George Giorgiu Gica Anakin1001 Data 6 iunie 2019 19:36:47
Problema Cifra Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <fstream>

using namespace std;
ifstream f("cifra.in");
ofstream g("cifra.out");
char S[1001];
int sum_first[11], sum_second[11], t, T, number, value, r, i, remains, final_digit;
int main()
{   ///0 - {0}
    ///1 - {1}
    ///2 - {4, 6}
    ///3 - {7, 3}
    ///4 - {6}
    ///5 - {5}
    ///6 - {6}
    ///7 - {3, 7}
    ///8 - {6, 4}
    ///9 - {9}
    ///FIRST
    sum_first[1] = 1;
    sum_first[2] = (sum_first[1] + 4) % 10;
    sum_first[3] = (sum_first[2] + 7) % 10;
    sum_first[4] = (sum_first[3] + 6) % 10;
    sum_first[5] = (sum_first[4] + 5) % 10;
    sum_first[6] = (sum_first[5] + 6) % 10;
    sum_first[7] = (sum_first[6] + 3) % 10;
    sum_first[8] = (sum_first[7] + 6) % 10;
    sum_first[9] = (sum_first[8] + 9) % 10;
    sum_first[10] = sum_first[9];
    ///SECOND
    sum_second[1] = 1;
    sum_second[2] = (sum_second[1] + 6) % 10;
    sum_second[3] = (sum_second[2] + 3) % 10;
    sum_second[4] = (sum_second[3] + 6) % 10;
    sum_second[5] = (sum_second[4] + 5) % 10;
    sum_second[6] = (sum_second[5] + 6) % 10;
    sum_second[7] = (sum_second[6] + 7) % 10;
    sum_second[8] = (sum_second[7] + 4) % 10;
    sum_second[9] = (sum_second[8] + 9) % 10;
    sum_second[10] = sum_second[9];
    f >> T;
    for(t = 1; t <= T; t++){
        f >> (S + 1);
        r = 0;
        for(i = 1; S[i + 1] != 0; i++){
            number = (r + (S[i] - '0'));
            value = number / 2;
            r = (number % 2) * 10;
        }
        remains = (r + (S[i] - '0'));
        final_digit = ((sum_first[10] + sum_second[10]) * value) % 10;
        if(remains <= 10)
            final_digit = (final_digit + sum_first[remains]) % 10;
        else
            final_digit = (final_digit + sum_first[10] + sum_second[remains - 10]) % 10;
        g << final_digit << '\n';
    }
    return 0;
}