Cod sursa(job #2020866)

Utilizator skoda888Alexandru Robert skoda888 Data 11 septembrie 2017 21:17:07
Problema Cifra Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
//Problema 8 - Cifra

#include <iostream>
#include <fstream>


int main()
{
    int T;

    std::ifstream in_cifra("cifra.in");
    std::ofstream out_cifra("cifra.out");

    //suma pentru n = 100 este egal cu 0
    //ceea ce inseamna ca suma pentru oricare n este date de n = ultimele doua cifre ale lui n
    //ultimele cifre pentru toate numerele incepand de la 100
    short n_egal_100[100];

    for(short num = 1; num <= 99; num++)
    {
        n_egal_100[num] = num;
        //aflu ultima cifra a lui n ^ n
        for(int i = 1; i < num; i++)
        {
            n_egal_100[num] *= num;
            n_egal_100[num] %= 10;
        }
        //memorez suma de pana acum
        n_egal_100[num] += n_egal_100[num - 1];
        n_egal_100[num] %= 10;
    }

    //numarul de teste pentru N
    in_cifra >> T;

    //efectuez cele T teste pentru N
    while((T--) > 0)
    {
        //voi avea numere mari, asadar le voi citi ca string-uri
        std::string numar_mare;
        std::getline(in_cifra, numar_mare);   ///potentiala eroare: citeste un rand gol

        // daca numarul are o cifra
        if(numar_mare.size() == 1)
        {
            out_cifra << n_egal_100[numar_mare[numar_mare.size() - 1]];
        }
        //in caz contrar
        else{

            out_cifra << n_egal_100[numar_mare[(numar_mare.size() - 2) - '0'] * 10 + numar_mare[(numar_mare.size() - 1) - '0']] << std::endl;
        }

    }

    return 0;
}