Cod sursa(job #1747747)

Utilizator mara.priponMara Pripon mara.pripon Data 25 august 2016 15:40:14
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int NMAX=1000000;
char s[NMAX+5];
class HugeN
{
    private: int x[NMAX+10];
    public: HugeN();
            HugeN(char *s);
            HugeN(const HugeN&other);
            void get_huge();
            HugeN&operator+=(long long k);
            long long&operator%(long long k);
            int cmp(const HugeN&other);
};
HugeN::HugeN()
{
    memset(x,0,sizeof(x));
    x[0]=1;
}
HugeN::HugeN(char *s)
{
    int i;
    x[0]=strlen(s);
    for (i=1;i<=x[0];i++)
        x[i]=s[x[0]-i]-48;
}
HugeN::HugeN(const HugeN&other)
{
    memset(x,0,sizeof(x));
    for (int i=0;i<=other.x[0];i++)
        x[i]=other.x[i];
}
void HugeN::get_huge()
{
    int i;
    for (i=x[0];i>=1;i--)
        printf("%d", x[i]);
    printf ("\n");
}
int HugeN::cmp(const HugeN&other)
{
    if (x[0]<other.x[0])
        return -1;
    else
    if(x[0]>other.x[0])
        return 1;
    else
    {
        for (int i=x[0];i>=1;i--) {
            if (x[i]>other.x[i])
                return 1;
            else if (x[i]<other.x[i])
                return -1;
        }
    }
    return 0;
}
HugeN&HugeN::operator+=(long long k){
    int i;
    long long aux,tr=k;
    for (i=1;i<=x[0];i++){
        aux=x[i]+tr;
        x[i]=aux%10;
        tr=aux/10;
    }
    while (tr){
        x[0]++;
        x[x[0]]=tr;
        tr/=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];
        r=r%k;
    }
    return r;
}
int main()
{
    freopen ("next.in","r",stdin);
    freopen ("next.out","w",stdout);
    long long k,rest;
    gets(s);
    HugeN a(s);
    scanf ("%lld",&k);
    rest=a%k;
    k=k-rest;
    a+=k;
    a.get_huge();
    return 0;
}