Pagini recente » Cod sursa (job #1264790) | Cod sursa (job #2220524) | Cod sursa (job #966113) | Cod sursa (job #847476) | Cod sursa (job #830890)
Cod sursa(job #830890)
/*
http://infoarena.ro/problema/cifra
as i noticed (and many others, except for cacalin)
this is solved by generating the last digit for the
first 100 numbers then suming it.
what matters from the input is the last 2 digits (if exist)
*/
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int t, n; /// how many cases, current case
int digit[100];
int raise(int n)
{
int j; /// iterators
int sum = 1;
for(j = 1; j <= n; ++j)
{
sum = (sum * n) % 10;
}
return sum;
}
void preprocess()
{
int i; /// iterators
for (i = 0; i < 100; ++i)
{
digit[i] = raise(i) % 10;
std::cout << digit[i] << " ";
}
digit[0] = 0;
}
int getDigits(string s)
{
int x;
if(s.size() == 1)
x = s[0] - '0';
else if (s.size() == 2)
x = (s[0] - '0') * 10 + s[1] - '0';
else if (s.size() > 2)
x = (s[s.size() - 2] - '0') * 10 + (s[s.size() - 1] - '0');
return x;
}
int main()
{
int i, j; /// iterators
int sum = 0;
string input;
ifstream cin ("cifra.in");
ofstream cout ("cifra.out");
preprocess();
cin >> t;
for (i = 0; i < t; ++i)
{
cin >> input;
sum = 0;
n = getDigits(input);
for (j = 0; j <= n; ++j)
sum = (sum + digit[j]) % 10;
cout << sum << "\n";
// cout << sum << endl;
}
return 0;
}