Cod sursa(job #1542276)

Utilizator TiberiuDTiberiu Danciu TiberiuD Data 5 decembrie 2015 11:16:47
Problema Cifra Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int ridica(int a, int b, int n){
    int result = 1;

    while (b) {
        if (b % 2 == 1){
            result = result * a % n;
        }
        b /= 2;
        a = a * a % n;
    }

    return result;
}

int calculeaza(int n) {
    int suma = 0;
    for(int i = 1; i <= n; i++)
        suma += ridica(i, i, 10);

    return suma % 10;
}

int main() {
    char cache[100];

    cache[0] = '0';
    for(int i = 1; i < 100; i++)
        cache[i] = '0' + calculeaza(i);

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

    if(!in || !out)
        return 1;

    int t;
    char n[102];
    in >> t;

    for(int i = 1; i <= t; i++) {
        in >> n;

        int pos;
        if(strlen(n) > 1)
            pos = (n[strlen(n) - 2] - '0') * 10 + n[strlen(n) - 1] - '0';
        else
            pos = n[0] - '0';

        out << cache[pos] << "\n";
    }

    in.close();
    return 0;
}