Pagini recente » Cod sursa (job #152390) | Cod sursa (job #2670072) | Cod sursa (job #1410979) | Cod sursa (job #2012935) | Cod sursa (job #1930656)
// 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;
}