Pagini recente » Cod sursa (job #2233959) | Cod sursa (job #366531) | Cod sursa (job #1636600) | Cod sursa (job #2204597) | Cod sursa (job #2327031)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("cifra.in");
ofstream cout("cifra.out");
int pw(int b, int e) {
int ans(1);
if (e == 0)
e = 4;
while (e) {
ans = ans * b % 10;
e--;
}
return ans;
}
int main()
{
int q;
string n;
cin >> q;
while (q--) {
cin >> n;
int ans(0), a, b;
reverse(n.begin(), n.end());
if (n.size() >= 2) {
for (int j = 1; j <= n[0] - '0'; ++j) {///analizam ultima grupa
ans += pw(j % 10, (j + (n[1] - '0') % 2 * 2) % 4);
if (ans >= 10)
ans -= 10;
}
if ((n[1] - '0')&1) {
bool t(0);
for (int i = n.size() - 1; i > 0; --i) {
n[i] -= '0';
if (t)
n[i] += 5;
t = 0;
if (n[i]&1)
t = 1;
n[i] /= 2;
}
a = n[1];
b = n[1] + 1;
}
else {
bool t(0);
for (int i = n.size() - 1; i >= 0; --i) {
n[i] -= '0';
bool _t(0);
if (n[i]&1)
_t = 1;
n[i] /= 2;
if (t)
n[i] += 5;
t = _t;
}
a = n[1];
b = n[1];
}
}
else {
a = b = 0;
for (int j = 1; j <= n[0] - '0'; ++j) {///analizam ultima grupa
ans += pw(j % 10, j % 4);
if (ans >= 10)
ans -= 10;
}
}
cout << (ans + 7 * (a + b) % 10) % 10 << '\n';
}
return 0;
}