Cod sursa(job #2326980)

Utilizator ContDeRacistAliniateEBlat ContDeRacist Data 24 ianuarie 2019 12:12:34
Problema Cifra Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.98 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream cin("cifra.in");
ofstream cout("cifra.out");

int pw(int b, int e) {
    int ans(1);
    if (e == 0)
        e = 4;
    while (e) {
        ans = ans * b % 10;
        e--;
    }
    return ans;
}

int main()
{
    int q;
    string n;
    cin >> q;
    while (q--) {
        cin >> n;
        int ans(0), a, b;
        reverse(n.begin(), n.end());
        if (n.size() >= 2) {
            for (int j = 1; j <= n[0] - '0'; ++j) {///analizam ultima grupa
                ans += pw(j % 10, j % 4 + (n[1] - '0') % 2 * 2);
                if (ans >= 10)
                    ans -= 10;
            }
            if ((n[1] - '0')&1) {
                bool t(0);
                for (int i = n.size() - 1; i > 0; --i) {
                    n[i] -= '0';
                    if (t)
                        n[i] += 5;
                    t = 0;
                    if (n[i]&1)
                        t = 1;
                    n[i] /= 2;
                }
                a = n[1];
                b = n[1] + 1;
            }
            else {
                bool t(0);
                for (int i = n.size() - 1; i > 0; --i) {
                    n[i] -= '0';
                    if (t)
                        n[i] += 5;
                    t = 0;
                    if (n[i]&1)
                        t = 1;
                    n[i] /= 2;
                }
                a = n[1];
                b = n[1];
            }
        }
        else {
            a = b = 0;
            for (int j = 1; j <= n[0] - '0'; ++j) {///analizam ultima grupa
                ans += pw(j % 10, j % 4);
                if (ans >= 10)
                    ans -= 10;
            }
        }
        for (int j = 1; j < 10; ++j) {
            ans += b * pw(j, j % 4);
            if (ans >= 10)
                ans -= 10;
            ans += a * pw(j, 2 + j % 4);
            if (ans >= 10)
                ans -= 10;
        }
        cout << ans << '\n';
    }
    return 0;
}