Cod sursa(job #3295878)

Utilizator itachi_uchihaDarius itachi_uchiha Data 9 mai 2025 12:07:48
Problema Cifra Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.06 kb
#include <fstream>
#include <string>

using namespace std;

ifstream fin("cifra.in");
ofstream fout("cifra.out");

int putere_mod_10(int baza, int exponent) {

    int cicluri[10][4] = {
        {0, 0, 0, 0},       // 0
        {1, 1, 1, 1},       // 1
        {2, 4, 8, 6},       // 2
        {3, 9, 7, 1},       // 3
        {4, 6, 4, 6},       // 4
        {5, 5, 5, 5},       // 5
        {6, 6, 6, 6},       // 6
        {7, 9, 3, 1},       // 7
        {8, 4, 2, 6},       // 8
        {9, 1, 9, 1}        // 9
    };

    int c = baza % 10;
    if (exponent == 0) return 1;
    int lungime = 1;
    if (c == 0 || c == 1 || c == 5 || c == 6)
        lungime = 1;
    else if (c == 4 || c == 9)
        lungime = 2;
    else
        lungime = 4;

    int poz = (exponent - 1) % lungime;
    return cicluri[c][poz];
}

int main() {
    int T;
    fin >> T;
    string N;
    while (T--) {
        fin >> N;

        int suma = 0;
        // convertim doar ultimii 2 cifre (pentru exponent), pentru că ciclul are max 4
        int n = 0;
        for (char c : N) {
            n = (n * 10 + (c - '0')) % 100000;
        }

        int rezultat = 0;
        for (int i = 1; i <= 9; i++) {
            rezultat = (rezultat + putere_mod_10(i, i)) % 10;
            if (to_string(i) == N) break;
        }

        // dacă N este mare, continuăm până la N ca string
        if (N.size() <= 5) {
            int nr = stoi(N);
            for (int i = 10; i <= nr; i++) {
                rezultat = (rezultat + putere_mod_10(i % 10, i)) % 10;
            }
        } else {
            // pentru valori mari de N (peste 100 de cifre), folosim doar ultima cifră
            // și iterăm până la 100 deoarece ciclul se stabilizează
            for (int i = 10; i <= 100; i++) {
                rezultat = (rezultat + putere_mod_10(i % 10, i)) % 10;
            }
        }

        fout << rezultat << '\n';
    }
    return 0;
}
/*

    Nu o sa calculez puterile alea gen 100^100 ca suta la suta imi iese din timp si din memorie
    Ce o sa fac eu o sa fie sa ma folosesc de niste cicluri de puteri

*/