Cod sursa(job #3140910)

Utilizator SSKMFSS KMF SSKMF Data 10 iulie 2023 16:48:11
Problema Cifra Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <fstream>
using namespace std;

ifstream cin ("cifra.in");
ofstream cout ("cifra.out");

class Numar_Mare {
    private:
        int cifre[101];

    public:
        Numar_Mare () { cifre[0] = 0; }
        ~Numar_Mare () { }

        friend ifstream &operator >> (ifstream &intrare , Numar_Mare &numar) {
            char sir[101]; intrare >> sir;
            int indice = 0; numar.cifre[0] = 0;
            while (sir[indice]) indice++;
            while (indice) numar.cifre[++numar.cifre[0]] = sir[--indice] - '0';
            return intrare;
        }

        Numar_Mare Impartire (int impartitor , int &rest) {
            Numar_Mare rezultat; rest = 0;
            rezultat.cifre[0] = (*this).cifre[0];
            for (int indice = cifre[0] ; indice ; indice-- , rest %= impartitor)
                rezultat.cifre[indice] = (rest = 10 * rest + cifre[indice]) / impartitor;

            while (rezultat.cifre[0] && !rezultat.cifre[rezultat.cifre[0]])
                rezultat.cifre[0]--;

            return rezultat;
        }

        int back () {
            return cifre[cifre[0]];
        }
};

int sir[] = {0 , 1 , 5 , 2 , 8 , 3 , 9 , 2 , 8 , 7 , 7 , 8 , 4 , 7 , 3 , 8 , 4 , 1 , 5 , 4};

int main ()
{   
    int intrebari;
    cin >> intrebari;

    Numar_Mare numar;
    for (int indice = 1 ; indice <= intrebari ; indice++)
    {
        cin >> numar;

        int rest;
        Numar_Mare repetitii = numar.Impartire(20 , rest);
        cout << (4 * repetitii.back() + sir[rest]) % 10 << '\n';
    }
    
    return 0;
}