Pagini recente » Cod sursa (job #2935533) | Cod sursa (job #2894826) | Cod sursa (job #2942167) | Cod sursa (job #2684152) | Cod sursa (job #1660867)
/**
* Solutia se bazeaza pe faptul ca rezultatele se repeta pentru N > 100 (pentru N = 100, raspunsul este 0).
* Astfel, programul precalculeaza primele 100 de sume, dupa care, pentru fiecare N citit, afiseaza rezultatul
* corespunzator lui N % 100.
*/
#include <cstdio>
#include <cstring>
using namespace std;
int T;
char N[102];
int result[101]; // retine toate raspunsurile pentru N <= 100; peste 100, se repeta
// precalculeaza toate posibilitatile de sume (se repeta dupa N = 100)
void computeResults() {
int n;
for (int i = 1; i <= 100; i++) {
n = 1;
for (int j = 1; j <= i; j++) {
n = (n * (i % 10)) % 10;
}
result[i] = (result[i - 1] + n) % 10;
}
}
int main() {
freopen("cifra.in", "r", stdin);
freopen("cifra.out", "w", stdout);
computeResults();
scanf("%d", &T);
for (int i = 1; i <= T; i++) {
scanf("%s", &N); // citeste N ca sir de caractere
int length = strlen(N);
int index = N[length - 1] - '0'; // retine ultima cifra
// daca N are mai mult de o cifra, retine ultimele doua
if (length > 1) {
index = (N[length - 2] - '0') * 10 + index;
}
printf("%d\n", result[index]);
}
}