Cod sursa(job #2440142)

Utilizator Caproiu_VictorCaproiu Victor Caproiu_Victor Data 17 iulie 2019 17:03:34
Problema Next Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>

using namespace std;
ifstream fin("next.in");
ofstream fout("next.out");
const int MAX_DIGITS=1000002;
const int BASE=10;
class HugeN{
    private:
        int x[MAX_DIGITS];
    public:
        //constructori
        HugeN(){
            memset(x,0,sizeof(x));
            x[0]=1;
        }
        HugeN(int n){
            memset(x,0,sizeof(x));
            do{
                ++x[0];
                x[x[0]]=n%10;
                n=n/10;
            }while(n>0);
        }
        HugeN (char s[MAX_DIGITS]){
            memset(x,0,sizeof(x));
            int n,i;
            n=strlen(s);
            x[0]=n;
            for(i=n-1;i>=0;i--)
                x[n-i]=s[i]-'0';
        }
        void print(){
            int i;
            for(i=x[0];i>=1;i--)
                fout<<x[i];
            fout<<"\n";
        }
    long long operator% (long long k);
    HugeN operator+=(long long k);
};
HugeN HugeN::operator+=(long long k){
    long long tr=k;
    int i;
    for(i=1;i<=x[0];i++){
        tr=x[i]+tr;
        x[i]=tr%10;
        tr=tr/10;
    }
    while(tr){
        x[0]++;
        x[x[0]]=tr%10;
        tr=tr/10;
    }
    return *this;
}
long long HugeN::operator%(long long k){
    long long r;
    int i;
    r=0;
    for(i=x[0];i>=1;i--){
        r=r*10+x[i];
        r=r%k;
    }
    return r;
}

int main()
{
    char s[MAX_DIGITS];
    fin.getline(s,MAX_DIGITS);
    long long d,r;
    HugeN n(s);
    fin>>d;

    r=n%d;
    if(r==0)
        n.print();
    else
    {
        d=d-r;
        n+=d;
        n.print();
    }

    return 0;
}