Cod sursa(job #3151769)

Utilizator TeodorVTeodorV TeodorV Data 22 septembrie 2023 19:56:54
Problema Cifra Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;

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

long long qpow(const long long a, long long b, const long long mod)
{
    if(b==0)
        return 1;
    if(b==1)
        return a%mod;
    if(b%2==0)
    {
        long long aux=qpow(a, b/2, mod)%mod;
        return (aux*aux)%mod;
    }
    else
    {
        return (a*qpow(a, b-1, mod))%mod;
    }
}

const int nrLoop=20;
int ultimCf[nrLoop+1],sumLoop=0;

pair<int, int> getLastCfNdivnrLoop(string n)
{
    int r=0;
    for(int i=n.size()-1; i>=0; i--)
    {
        r=r*10+n[i]-'0';
        n[i]=(r/nrLoop)%10+'0';
        r%=nrLoop;
    }
    return make_pair(n[n.size()-1]-'0', r);
}

int getAns(const string& n)
{
    int rez;
    pair<int, int> aux=getLastCfNdivnrLoop(n);
    rez=aux.first*sumLoop;

    for(int i=1; i<=aux.second; i++)
        rez+=ultimCf[i];
    return rez%10;
}

int main()
{
    for(int i=1; i<=nrLoop; i++)
    {
        ultimCf[i]=qpow(i, i, 10);
        sumLoop+=ultimCf[i];
    }
    int T;
    fin>>T;
    for(int q=1; q<=T; q++)
    {
        string n;
        fin>>n;
        fout<<getAns(n)<<'\n';
    }
    return 0;
}