Cod sursa(job #1930656)

Utilizator s1mpMihai Alexandru s1mp Data 19 martie 2017 10:29:34
Problema Cifra Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 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;
}