Cod sursa(job #1937917)

Utilizator adriannicolaeAdrian Nicolae adriannicolae Data 24 martie 2017 13:36:55
Problema Cifra Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
// Sa se calculeze ultima cifra a sumei 1^1 + 2^2 + ... + N^N pentru T numere.
// ---------------------------------------------------------------------------
 
#include<iostream>
#include<fstream>
#include<string.h>
 
#define Nmax 101
 
using namespace std;
 
int V[Nmax];
 
// Calculeaza ultima cifra a numarului X^X
// - trebuie luata in considerare doar ultima cifra a numarului la momentul i;
// ---------------------------------------
 
int ultimaCifra(int X) {
    int p = 1;
    for(int i = 1; i <= X; i++) {
        p = (p * X) % 10;
    }
    return p;
}
 
// Generam ultima cifra a primelor 100 sume
// - ne vom folosi de ultima cifra a sumei precedente;
// ----------------------------------------
 
void genereazaVector() {
    for(int i = 1; i < 100; i++) {
        V[i] = (V[i-1] + ultimaCifra(i)) % 10;
    }
}
 
// ---------------------------------------
 
// Valorile ultimei cifre se vor repeta din 100 in 100
// ---------------------------------------
 
int main() {
    ifstream f("cifra.in");
    ofstream g("cifra.out");
    genereazaVector();
    char S[Nmax],c;
    int T;
    f >> T;
    for(int i = 1; i <= T; i++) {
        f.get(c);
        f.get(S,Nmax);
        int nr = 0;
        // nr = S % 100;
        if(strlen(S) == 1) {
            nr = S[strlen(S) - 1] - '0';
        } else {
            nr = (S[strlen(S) - 1] - '0') + (S[strlen(S) - 2] - '0') * 10;
        }
        g<<V[nr]<<'\n';
    }
    f.close();
    g.close();
    return 0;
}