Cod sursa(job #1687915)

Utilizator AndreiITCuriman Andrei AndreiIT Data 13 aprilie 2016 09:52:27
Problema Next Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
/**
    code by purplecoder
*/
#include <fstream>
#include <cstring>
#define maxi(a, b) ( ( a ) > ( b ) ? ( a ) : ( b ) )
using namespace std;
ifstream cin("next.in");
ofstream cout("next.out");
const int MAXN = 1000005;
int n[MAXN], b[MAXN];
long long d;
char s[MAXN];
void make_huge()
{
    do
    {
        b[++b[0]] = d % 10;
        d = d / 10;
    }while(d);
}
void sumh()
{
    int tr = 0, aux = 0, l;
    l = maxi(n[0], b[0]);
    n[0] = l;
    for(int i=1; i<=n[0]; ++i)
    {
        aux = n[i] + b[i] + tr;
        n[i] = aux % 10;
        tr = aux / 10;
    }
    while(tr)
    {
        n[++n[0]] = tr % 10;
        tr /= 10;
    }
}
long long rest()
{
    long long r = 0;
    for(int i=n[0]; i>=1; --i)
        r = ( r * 10 + n[i] ) % d;
    return r;
}
int main()
{
    cin.getline(s, MAXN);
    int lg = strlen(s);
    n[0] = lg;
    for(int i=lg-1; i>=0; --i)
        n[lg-i] = s[i] - '0';
    cin>>d;
    int r = rest();
    if(r == 0)
    {
        for(int i=n[0]; i>=1; --i)
            cout<<n[i];
        return 0;
    }
    d = d - r;
    make_huge();
    sumh();
    for(int i=n[0]; i>=1; --i)
            cout<<n[i];
    return 0;
}