Cod sursa(job #3338306)

Utilizator iondodon1998Dodon Ion iondodon1998 Data 2 februarie 2026 17:00:29
Problema Cifra Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#include <string.h>

static int mod_str(const char *s, int mod) {
    int r = 0;
    for (int i = 0; s[i]; ++i) {
        r = (r * 10 + (s[i] - '0')) % mod;
    }
    return r;
}

static int powmod(int a, int e, int mod) {
    int r = 1 % mod;
    a %= mod;
    while (e > 0) {
        if (e & 1) r = (r * a) % mod;
        a = (a * a) % mod;
        e >>= 1;
    }
    return r;
}

int main(void) {
    FILE *fin = fopen("cifra.in", "r");
    FILE *fout = fopen("cifra.out", "w");
    if (!fin || !fout) return 0;

    int T;
    if (fscanf(fin, "%d", &T) != 1) {
        return 0;
    }

    int pref[21];
    pref[0] = 0;
    for (int k = 1; k <= 20; ++k) {
        int last = powmod(k % 10, k, 10);
        pref[k] = (pref[k - 1] + last) % 10;
    }
    int sum20 = pref[20];

    for (int tc = 0; tc < T; ++tc) {
        char N[10005];
        if (fscanf(fin, "%10000s", N) != 1) break;
        int r = mod_str(N, 20);
        int s = mod_str(N, 200);
        int qmod10 = s / 20; /* since s in [0,199] */
        int ans = (sum20 * qmod10 + pref[r]) % 10;
        fprintf(fout, "%d\n", ans);
    }

    fclose(fin);
    fclose(fout);
    return 0;
}