Cod sursa(job #475261)

Utilizator Astrid28Ruxandra Cohal Astrid28 Data 6 august 2010 13:48:27
Problema Cifra Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<iostream>
#include<fstream>
#include<string>

using namespace std;

//ultima cifra a sumelor pana la n=20; ucSuma[0]=0
int ucSuma[21] = {0,1,5,2,8,3,9,2,8,7,7,8,4,7,3,8,4,1,5,4,4}; 

//numarul n, citit ca sir de caractere
char n[101];

int t;

fstream fin, fout;


void initializare()
{
	fin.open("cifra.in", ios::in );
	fout.open("cifra.out", ios::out );
	fin>>t;
}

//returnez cifra cautata
int ultimaCifra( char *nr )
{
	//uc a catului si restul lui n la imp. cu 20 
	int cat, rest;
	int cat_intermediar;
	//numar = nr. format din ultimele 2 cf. ale lui n
	int numar;
	int l;

	//daca nr. citit e format dintr-o sg.cifra
	if ( strlen(nr) == 1 )
	{
		rest = nr[0] - '0';	
		return ucSuma[rest];	
	}
	
	//daca nr. citit are mai mult de o cf.
	l = strlen(nr);
	numar = (nr[l-2] - '0')*10 + ( nr[l-1] - '0' );
	rest = numar % 20;
	cat_intermediar = numar / 20;

	if ( l == 2 )
		return ( cat_intermediar * 4 + ucSuma[rest] ) % 10;

	cat = ( (nr[l-3] - '0')*10 + (cat_intermediar *2 ) ) / 2;
	return ( cat * 4 + ucSuma[rest] ) % 10;

}

int main()
{
	initializare();

	for ( int i=1; i<=t; i++ )
	{
		fin>>n;
		fout<<ultimaCifra(n)<<endl;
	}

	fin.close();
	fout.close();

	return 0;
}