Cod sursa(job #612705)

Utilizator dmandyPogurschi Andrei dmandy Data 9 septembrie 2011 18:33:42
Problema Cifra Scor 0
Compilator cpp Status done
Runda test_info20 Marime 2.89 kb
/*
Gigel, fiind plictisit, se juca in timpul orei de matematica, desenand pe o foaie. Din pacate, profesorul l-a vazut si i-a spus ca ii pune nota 4 daca nu rezolva urmatoarea problema: pentru o valoarea N data trebuie sa determine ultima cifra a sumei 11 + 22 + ... + NN.

Cerinta
Scrieti un program care sa-l ajute pe Gigel si sa determine ultima cifra a acestei sume pentru T valori date ale lui N.

Date de intrare
Pe prima linie din fisierul cifra.in se va afla numarul T. Pe urmatoarele T linii se vor gasi valori ale lui N pentru care trebuie gasit raspunsul.

Date de iesire
Pe cele T linii ale fisierului cifra.out se vor gasi raspunsurile pentru valorile lui N date in fisierul de intrare.

Restrictii
1 = T = 30.000
ATENTIE! 1 = N < 10100. Numerele trebuie citite ca siruri de caractere!
Se acorda punctaj pentru un test doar daca toate cele T valori din fisierul de iesire sunt corecte
*/

#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main()
{
int n,uc,pc,nc,rez[10][10];
stringstream sirc (stringstream::in | stringstream::out);
string sir;
rez[0][0]=0,rez[0][1]=1,rez[0][2]=5,rez[0][3]=2,rez[0][4]=8,rez[0][5]=3,rez[0][6]=9,rez[0][7]=2,rez[0][8]=8,rez[0][9]=7;
rez[1][0]=7,rez[1][1]=8,rez[1][2]=2,rez[1][3]=9,rez[1][4]=5,rez[1][5]=0,rez[1][6]=6,rez[1][7]=9,rez[1][8]=5,rez[1][9]=4;
rez[2][0]=4,rez[2][1]=5,rez[2][2]=9,rez[2][3]=6,rez[2][4]=2,rez[2][5]=7,rez[2][6]=3,rez[2][7]=6,rez[2][8]=2,rez[2][9]=1;
rez[3][0]=1,rez[3][1]=2,rez[3][2]=6,rez[3][3]=3,rez[3][4]=9,rez[3][5]=4,rez[3][6]=0,rez[3][7]=3,rez[3][8]=9,rez[3][9]=8;
rez[4][0]=8,rez[4][1]=9,rez[4][2]=3,rez[4][3]=0,rez[4][4]=6,rez[4][5]=1,rez[4][6]=7,rez[4][7]=0,rez[4][8]=6,rez[4][9]=5;
rez[5][0]=5,rez[5][1]=6,rez[5][2]=0,rez[5][3]=7,rez[5][4]=3,rez[5][5]=8,rez[5][6]=4,rez[5][7]=7,rez[5][8]=3,rez[5][9]=2;
rez[6][0]=2,rez[6][1]=3,rez[6][2]=7,rez[6][3]=4,rez[6][4]=0,rez[6][5]=5,rez[6][6]=1,rez[6][7]=4,rez[6][8]=0,rez[6][9]=9;
rez[7][0]=9,rez[7][1]=0,rez[7][2]=4,rez[7][3]=1,rez[7][4]=7,rez[7][5]=2,rez[7][6]=8,rez[7][7]=1,rez[7][8]=7,rez[7][9]=6;
rez[8][0]=6,rez[8][1]=7,rez[8][2]=1,rez[8][3]=8,rez[8][4]=4,rez[8][5]=9,rez[8][6]=5,rez[8][7]=8,rez[8][8]=4,rez[8][9]=3;
rez[9][0]=3,rez[9][1]=4,rez[9][2]=8,rez[9][3]=5,rez[9][4]=1,rez[9][5]=6,rez[9][6]=2,rez[9][7]=5,rez[9][8]=1,rez[9][9]=0;
ifstream f1 ("cifra.in");
ofstream f2 ("cifra.out");
if (f1.is_open())
{
  while (! f1.eof())
  {
    f1>>n;
    for (int i=0; i<n; ++i)
    {
      f1>>sir;
      if (sir.size() >=2)
      {
        sirc << sir.at(sir.size()-1) << sir.at(sir.size()-2);
        sirc >> nc;
        uc=nc%10;
        nc=nc/10;
        pc=nc%10;
      }
      else
      {
        sirc << sir.at(sir.size()-1);
        sirc >> nc;
        uc=nc%10;
        pc=0;
      }
      sir.clear();
      sirc.clear();
      f2<<rez[pc][uc]<<"\n";
    }             
  }
}
f1.close();
f2.close();
return 0;
}