Pagini recente » Cod sursa (job #1998200) | Cod sursa (job #2486343) | Cod sursa (job #1824779) | Cod sursa (job #2777223) | Cod sursa (job #1010889)
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
ifstream input("cifra.in");
ofstream output("cifra.out");
int last_digit(string number_str) {
// All that matters is the last two digits of the number,
// because the last digit of the sum of every 100 consecutive
// terms is 0.
string::iterator it;
it = number_str.end();
it--; // To get rid of new line.
int number = *it - '0';
if (it > number_str.begin()) {
it--;
number += (*it - '0') * 10;
}
int sum = 0;
for (int i = 1; i <= number; i++) {
switch(i % 10)
{
// Cases in which i^i always ends in the same digit.
case 1: sum += 1; break;
case 4: sum += 6; break;
case 5: sum += 5; break;
case 6: sum += 6; break;
case 8: sum += 6; break;
case 9: sum += 9; break;
// Cases in which the last digit of i^i depends on the
// form of i.
case 2: if (i % 4 == 2) { sum += 4; } else { sum += 6; } break;
case 3: if (i % 4 == 3) { sum += 7; } else { sum += 3; } break;
case 7: if (i % 4 == 3) { sum += 3; } else { sum += 7; } break;
}
}
return (sum % 10);
}
int main()
{
int t;
input >> t;
for (int i = 0; i < t; i++) {
string number_str;
input >> number_str;
output << last_digit(number_str) << endl;
}
output.close();
}