Cod sursa(job #1687882)

Utilizator ticolea.andradaAndrada Ticolea ticolea.andrada Data 13 aprilie 2016 09:39:09
Problema Next Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <cstring>

using namespace std;

ifstream in("next.in");
ofstream out("next.out");

const int NMAX = 1000000;
int a[NMAX+5];
char s[NMAX+1];


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

void adunh(int a[], int b[])
{int i, tr, aux, l;
 tr = 0;
 l = max(a[0], b[0]);
 a[0] = l;

 for(i = 1; i <= a[0]; i++)
    {aux = a[i] + b[i] + tr;
     a[i] = aux % 10;
     tr = aux / 10;
    }

 while(tr)
    {a[++a[0]] = tr % 10;
     tr = tr / 10;
    }
}

void printh(int x[])
{for(int i = x[0]; i >= 1; --i)
   out<<x[i];
 out<<endl;
}

int main()
{long long d, r;
 int n, i;
    in.getline(s, NMAX+1);
    in>>d;
    n = strlen(s);
    a[0] = n;

    for(i = n - 1; i >= 0; i--)
        a[n - i] = s[i] - '0';

    r = rest_hn_int(a, d);

    if(r)
    {d = d - r;
     //a + d;
     int b[20];
     memset(b,0,sizeof(b));
     do{b[++b[0]] = d % 10;
        d = d/ 10;
        } while(d);
    adunh(a, b);
    }

    printh(a);

    return 0;
}