Cod sursa(job #2393879)

Utilizator cyg_dragos10Ivan Dragos cyg_dragos10 Data 1 aprilie 2019 10:11:18
Problema Next Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;

const int NMAX = 1000005;

int rest_impart_huge_int(int a[],int k)
{
    int i,r=0;
    for(i = a[0];i >= 1;i--)
    {
        r = r * 10 + a[i];
        r = r % k;
    }
    return r;
}

void h_adun_huge_int(int a[],long long k)
{
    int tr = 0,co,i = 1,nr;
    co = k;
    nr = a[0];
    while(nr)
    {
        a[i] = a[i] + co % 10 + tr;
        if(co > 0)
            co = co / 10;
        tr = 0;
        if(a[i] > 9)
        {
            tr = 1;
            a[i] = a[i] % 10;
        }
        i++;
        nr--;
    }
    if(tr)
        a[++a[0]] = tr;
}

int main()
{
    freopen("next.in","r",stdin);
    freopen("next.out","w",stdout);
    char ch;
    int a[NMAX],i,r;
    long long d;
    memset(a,0,sizeof(a));
    while(scanf("%c",&ch) == 1 && ch != '\n')
    {
        if(ch >= '0' && ch <= '9')
            a[++a[0]] = ch - '0';
    }
    reverse(a + 1,a + a[0] + 1);
    scanf("%I64d",&d);
    r = rest_impart_huge_int(a,d);
    if(r)
    {
        r = d - r;
        h_adun_huge_int(a,r);
    }
    for(i = a[0];i >= 1;i--)
        printf("%d",a[i]);
    return 0;
}