Cod sursa(job #1482430)

Utilizator andrettiAndretti Naiden andretti Data 7 septembrie 2015 10:16:32
Problema Calcul Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<stdio.h>
#include<algorithm>
#include<cstring>
#define maxn 200005
using namespace std;

int n,sol,C;
char A[maxn],B[maxn],a[maxn];

void read()
{
    scanf("%s\n",A+1);
    scanf("%s %d",B+1,&C);
}

void solve()
{
    int Ac=0,Sc,MOD,c;

    int nr=strlen(A+1);
    long long f=1;

    MOD=1;
    for(int i=1;i<=C;i++) MOD*=10;

    c=C;
    for(int i=nr;i && c;i--,c--,f*=10)
     Ac+=f*(A[i]-'0');

    int x;
    nr=strlen(B+1);
    for(int i=1;i<=nr;i++)
    {
        if(B[i]>='0' && B[i]<='9') x=B[i]-'0';
        else x=B[i]-'A'+10;

        for(int j=3;j>=0;j--)
         a[++n]=((x>>j)&1);
    }

    Sc=Ac;
    for(int i=n;i;i--)
    {
        if(a[i]) sol=(1LL*sol*Ac+Sc)%MOD;
        Sc=(1LL*Sc*(1+Ac))%MOD;
        Ac=(1LL*Ac*Ac)%MOD;
    }

    int nrc,aux=sol;
    for(nrc=0;aux;aux/=10,nrc++);

    if(sol==0) nrc=1;
    for(int i=1;i<=C-nrc;i++) printf("0");
}

int main()
{
    freopen("calcul.in","r",stdin);
    freopen("calcul.out","w",stdout);

    read();
    solve();
    printf("%d",sol);

    fclose(stdin);
    fclose(stdout);
    return 0;
}