Cod sursa(job #1238821)

Utilizator YoChinezuWeng Mihai Alexandru YoChinezu Data 7 octombrie 2014 20:00:43
Problema Next Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <cstdio>
#include <cstring>

using namespace std;

const int nmax=1000002;
char s[1000001];
int v[20];

class huge{
private:    int x[nmax];
public: huge(){
        memset(x,0,sizeof(x));
        x[0]=1;
    };
    huge(long long n){
        memset(x,0,sizeof(x));
        x[0]=0;
        do{
            x[++x[0]]=n%10;
            n=n/10;
        }while(n);
    }
    void read(){
        scanf("%s",&s);
        int n,i;
        n=strlen(s);
        x[0]=0;
        for(i=n-1;i>=0;--i){
            ++x[0];
            x[x[0]]=s[i]-'0';
        }
    }
    void print(){
        for(int i=x[0];i>=1;--i)    printf("%d",x[i]);
    }
    long long& operator %(long long k){
        long long r=0;
        int i;
        for(i=x[0];i>0;--i){
            r=(long long)r*10+x[i];
            r%=k;
        }
        return r;
    }
    huge adunNimic(long long k)
    {
        int i;
        long long t = k;
        for (i=1;i<=x[0]; ++i)
        {
            t = t +x[i];
            x[i] = t%10;
            t = t/10;
        }
        while(t)
        {
            x[0]++;
            x[x[0]]=t % 10;
            t=t/10;
        }
        return *this;
    }
};

void DOreMIfa(long long n){
    do{
        v[++v[0]]=n%10;
        n=n/10;
    }while(n);
}

int main(){
    freopen("next.in","r",stdin);
    freopen("next.out","w",stdout);

    huge A;
    A.read();
    long long d,r;

    scanf("%lld",&d);

    r=A%d;
    if(r){
        d-=r;

        A.adunNimic(d);
    }
    A.print();

    return 0;
}