Cod sursa(job #1687869)

Utilizator AndreiITCuriman Andrei AndreiIT Data 13 aprilie 2016 09:30:34
Problema Next Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 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[20];
long long d;
char s[MAXN];
void make_huge()
{
    do
    {
        b[++b[0]] = d % 10;
        d = d / 10;
    }while(d);
}
void sumhi()
{
    int tr = 0, i, aux = 0, l;
    l = maxi(n[0], b[0]);
    for(i=1; i<=n[0]; ++i)
    {
        aux = n[i] + b[i] + tr;
        n[i] = aux % 10;
        tr = aux / 10;
    }
    if(tr) n[++n[0]] = tr;
}
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();
    sumhi();
    for(int i=n[0]; i>=1; --i)
            cout<<n[i];
    return 0;
}