Cod sursa(job #1747765)

Utilizator IoanZioan zahiu IoanZ Data 25 august 2016 15:56:35
Problema Next Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int max_digits=1000005;
const int base=10;
char s[max_digits];

class HugeN
{
private:
    int x[max_digits];
public:
    HugeN()
    {
        x[0]=1;
        memset(x,0,sizeof(x));
    }
    HugeN (char *s)
    {
        x[0]=strlen(s);
        for(int i=1;i<=x[0];++i)
            x[i]=s[x[0]-i]-'0';
    }
    void print()
    {
        for(int i=x[0];i>=1;--i )
            printf("%d",x[i]);
        printf("\n");
    }
    HugeN operator+(long long k);
    long long operator %(long long k);
};

HugeN HugeN::operator +(long long k)
{
    int i;
    long long aux,tran;
    tran=k;
    for (i=1;i<=x[0];++i)
    {
        aux=x[i]+tran;
        x[i]=aux%10;
        tran=aux/10;
    }
    while (tran)
    {
        x[++x[0]]=tran%10;
        tran/=10;
    }
    return *this;
}

long long HugeN::operator %(long long k)
{
    int i;
    long long r;
    r=0;
    for(i=x[0];i>=1;--i)
        r=(r*10+x[i])%k;
    return r;
}

int main()
{
    freopen("next.in","r",stdin);
    freopen("next.out","w",stdout);
    long long d,r;
    scanf("%s",&s);
    scanf("%lld",&d);
    HugeN n(s);
    r=n%d;
    if (r==0)
        n.print();
    else
    {
        n=n+(d-r);
        n.print();
    }
    return 0;
}