Cod sursa(job #91350)

Utilizator piroslPiros Lucian pirosl Data 12 octombrie 2007 02:04:55
Problema Cifra Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int pow[9][4];
int a10[10];
int a20[10];

void initPow() 
{
	for(int i=1;i<10;++i)
	{
		int a = 1;
		for(int j=0;j<4;++j) 
		{
			a *= i;
			a %=10;
			pow[i-1][j] = a;
		}
	}

	int start = 0;
	int result = 0;
	for(int j=0;j<10;++j)
	{
		result = (result+pow[j][start])%10;
		start = (start+1)%4;
		a10[j] = result;
	}

	start = 2;
	result = 0;
	for(int j=0;j<10;++j)
	{
		result = (result+pow[j][start])%10;
		start = (start+1)%4;
		a20[j] = result;
	}

}

int main(void) 
{
	ifstream in;
	ofstream out;
	string line;
	int t;

	initPow();
	in.open("cifra.in");
	out.open("cifra.out");

	in >> t;
	for(int i=0;i<t;++i)
	{
		in >> line;
		int result = 0;
		int start = 0;
		if(line.length() >= 2) 
		{
			int a1 = line.at(line.length() - 2) - '0';
			result = (7 * a1)%10;
			if (a1%2!=0)
				start = 2;
		}
		int a2 = line.at(line.length() - 1) - '0';
		
		if(start == 0)		
			result = (result+a10[a2-1])%10;
		else
			result = (result+a20[a2-1])%10;
		
		out << result << endl;
	}

	in.close();
	out.close();
	return 0;
}