Cod sursa(job #2958868)

Utilizator Cezar2009Cezar Mihai Titihazan Cezar2009 Data 28 decembrie 2022 18:51:41
Problema Cifra Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.19 kb
//https://infoarena.ro/problema/cifra
#include <bits/stdc++.h>
using namespace std;
#define SUM 7

ifstream fin ("cifra.in");
ofstream fout ("cifra.out");

struct element
{
    short int p;
    short int s;
};
struct element e[10];
void setare();
int main()
{
    setare();
    int t;
    string n;
    fin>>t;
    //cout<<t;
    getline(fin, n);
    for(int i=1;i<=t;i++)
    {

        int k=0,s=0;
        getline(fin, n);
        k=n.size();
        //cout << n<<"\n";
        k=k-1;
        short int u=(n[k]-48);//ultimele 2 cifere
        if(k>=2)
        {
            u=(n[k-1]-48)*10+(n[k]-48);
            s=((n[k-1]-48)*SUM)%10;
            //cout<<n[k-1]-48<<" "<<n[k]-48<<" ";
        }
        //cout<<u<<"\n";
        //cout<<s<<" ";
        //cout<<i<<" i";
        //cout<<u<<" ";
        for(int j=n[k]-48;j>=1;j--)
        {
            //cout<<j<<"j ";
            if(e[j].s!=0)
            {
                if(j&1==1)
                {
                    if(u%4==3)
                    {
                        s=(s+e[j].p)%10;
                        //cout<<e[j].p<<" impar p ";
                    }
                    else
                    {
                        s=(s+e[j].s)%10;
                        //cout<<e[j].s<<" impar s  ";
                    }
                }//impar
                else
                {
                    if(u%4==2)
                    {
                        s=(s+e[j].p)%10;
                        //cout<<e[j].p<<" par p ";
                    }
                    else
                    {
                        s=(s+e[j].s)%10;
                        //cout<<e[j].s<<"par s ";
                    }
                }//par
            }//term
            else
            {
                s=(s+e[j].p)%10;
                //cout<<e[j].p<<" nimic ";
            }
            u--;
        }//for
        fout<<s<<"\n";
    }


    return 0;
}
void setare()
{
    e[0].p=0;
    e[1].p=1;
    e[2].p=4;
    e[2].s=6;
    e[3].p=7;
    e[3].s=3;
    e[4].p=6;
    e[5].p=5;
    e[6].p=6;
    e[7].p=3;
    e[7].s=7;
    e[8].p=6;
    e[8].s=4;
    e[9].p=9;
}