Cod sursa(job #2231380)

Utilizator CozmaCatalinCozma Catalin CozmaCatalin Data 13 august 2018 23:39:20
Problema Cifra Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.13 kb
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <vector>
#include <fstream>

std::ifstream in("cifra.in");
std::ofstream out("cifra.out");
using namespace std;

const int MAX = 100;
char Number[MAX + 1];

vector < int > myVector;

void PushValues()
{
	//Fiecare element al vectorului reprezinta ultima cifra a numarului N^N
	myVector.push_back(1); //1^1
	myVector.push_back(4); //2^2
	myVector.push_back(7); //3^3
	myVector.push_back(6); //4^4
	myVector.push_back(5); //5^5
	myVector.push_back(6); //6^6
	myVector.push_back(3); //7^7
	myVector.push_back(6); //8^8
	myVector.push_back(9); //9^9
	myVector.push_back(0); //10^10
	myVector.push_back(1); //11^11
	myVector.push_back(6); //12^12
	myVector.push_back(3); //13^13
	myVector.push_back(6); //14^14
	myVector.push_back(5); //15^15
	myVector.push_back(6); //16^16
	myVector.push_back(7); //17^17
	myVector.push_back(4); //18^18
	myVector.push_back(9); //19^19
	myVector.push_back(0); //20^20
   //Ultima cifra a sumei oricaror 20 termeni consecutivi este 4
}
int main() 
{

	PushValues();
	int Queries;
	in >> Queries; // Citim cate intrebari avem
	while (Queries--)
	{
		int Last = 0;
		in >> Number; // Citim numarul
		int Lg = strlen(Number);

		if (Lg > 1)
		{
			Last = (Number[Lg - 1] - 48) + (Number[Lg - 2] - 48) * 10; // Daca are mai mult de o cifra numarul le luam pe ultimele 2
			                                                         // sub forma de int
		}
		else Last = Number[0] - 48; // Altfel o luam doar pe ultima

		// Trebuie sa vedem ultima cifra a sumei din enunt dar pentru numarul Last
		int R = Last % 20; // Cati termeni raman dupa ce impartim la 20
		int Sum = Last / 20 * 4 % 10; //Inmultim cate perechi consecutive de 20 am gasit in Last
		                              //(care e cel mult 4, deci Sum da cel mult 16, asa ca impartim cu rest la 10)

		for (size_t k = 0; k < R; ++k) // Trecem prin toti termenii care raman la impartirea cu 20
			Sum += myVector[k]; // Si adunam fiecare ultima cifra la Sum
		out << Sum % 10 << "\n"; // Afisam pe ultima
	}
	return 0;
}