Cod sursa(job #1777601)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 12 octombrie 2016 18:12:21
Problema Next Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.34 kb
#include<bits/stdc++.h>
#define baza 10
using namespace std;
int v[1000005],d,v1[1000005],rest;
char s[1000005];
int restscalar(int a[],int  n)
{
    int  t=0;
    for (int i=a[0];i>=1;i--)
    {
        t=(t*baza+a[i])%n;
    }
    return t;
}
void adunare(int a[],int b[])
{
    int t=0,i;
    for(i=1;i<=a[0] ||i<=b[0] ||t;i++)
    {
        t=t+a[i]+b[i];
        a[i]=t%baza;
        t/=baza;
    }
}
void conversie(int v[],int x)
{
    int da=0;
    while(x)
    {
        v[++da]=x%baza;
        x/=baza;
    }
    v[0]=da;
}
void scrie(int x)
{
   /* if(x<100000000000000)
    {
        printf("0%lld",x);
        return;
    }
    if(x<10000000000000)
    {
        printf("00%lld",x);
        return;
    }
    if(x<1000000000000)
    {
        printf("000%lld",x);
        return;
    }
     if(x<100000000000)
    {
        printf("0000%lld",x);
        return;
    }
    if(x<10000000000)
    {
        printf("00000%lld",x);
        return;
    }
    if(x<1000000000)
    {
        printf("000000%lld",x);
        return;
    }
    if(x<100000000)
    {
        printf("0000000%lld",x);
        return;
    }
     if(x<10000000)
    {
        printf("00000000%lld",x);
        return;
    }
      if(x<1000000)
    {
        printf("000000000%lld",x);
        return;
    }
    if(x<100000)
    {
        printf("0000000000%lld",x);
        return;
    }
        if(x<10000)
    {
        printf("00000000000%lld",x);
        return;
    }
        if(x<1000)
    {
        printf("000000000000%lld",x);
        return;
    }
        if(x<100)
    {
        printf("0000000000000%lld",x);
        return;
    }
         if(x<10)
    {
        printf("00000000000000%lld",x);
        return;
    }*/
    printf("%d",x);
}
void afisare(int v[])
{
    int x=v[0];
    //scrie(v[x]);
    printf("%d",v[x]);
    for(int i=x-1;i>=1;i--)
        scrie(v[i]);
    printf("\n");
}
int main()
{
    freopen("next.in","r",stdin);
    freopen("next.out","w",stdout);
    scanf("%s",&s);
    int x=strlen(s);
    for(int i=0;i<x;i++)
    {
        v[i+1]=s[i]-'0';
    }
    reverse(v+1,v+x+1);
    v[0]=x;
    scanf("\n");
    scanf("%d",&d);
    rest=restscalar(v,d);
    rest=d-rest;
    conversie(v1,rest);
    adunare(v,v1);
    afisare(v);
    return 0;
}