Cod sursa(job #1239224)

Utilizator YoChinezuWeng Mihai Alexandru YoChinezu Data 8 octombrie 2014 16:32:13
Problema Next Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <cstdio>
#include <cstring>

using namespace std;

const int nmax=1000001;
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%(1LL*10);
            n=n/(1LL*10);
        }while(n);
    }
    void read(){
        gets(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=r*10+1LL*x[i];
            r%=k;
        }
        return r;
    }
    huge& adunNimic(long long d){
        int i;
        long long t;
        for(t=d,i=1;i<=x[0];++i){
			t=x[i]+t;
            x[i]=t%10;
            t/=10;
        }
        while(t){
            ++x[0];
            x[x[0]]=t%10;
            t/=10;
        }
        return *this;
    }
};

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;
}