Cod sursa(job #475275)

Utilizator Astrid28Ruxandra Cohal Astrid28 Data 6 august 2010 14:06:17
Problema Cifra Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<iostream>
#include<stdio.h>
#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;

FILE *fin, *fout;


void initializare()
{
	/*fin.open("cifra.in", ios::in );
	fout.open("cifra.out", ios::out );
	fin>>t;*/
	fin = fopen("cifra.in", "r");
	fout = fopen("cifra.out", "w");
	fscanf(fin,"%d",&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++ )
	{
		fscanf(fin,"%s",&n);
		fprintf(fout,"%d\n",ultimaCifra(n));
	}

	fclose(fin);
	fclose(fout);

	return 0;
}