Cod sursa(job #1238261)

Utilizator irinaneaguIrina Neagu irinaneagu Data 6 octombrie 2014 10:04:37
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int nr_digit=1000001;
class hugeN
{
    private:
        int x[nr_digit];
    public:
    hugeN ()
    {
        memset(x,0,sizeof(x));
        x[0]=1;
    }
    hugeN(char *s)
    {
        int n,i;
        n=strlen(s);
        x[0]=n;
        for(i=n-1;i>=0;i--)
            x[n-i]=s[i]-'0';
    }
    hugeN(const hugeN& other)
    {
        memcpy(x,other.x,sizeof(other.x));
    }
    void print()
    {
        for(int i=x[0];i>=1;i--)
            printf("%d",x[i]);
        printf("\n");
    }
    hugeN& operator +=(long long ad);
    long long operator %(long long d);
};
hugeN& hugeN::operator +=(long long ad)//adun la un nr mare un long long
    {
        int i=0;
        do{
            x[++i]=x[i]+ad%10;
            x[i+1]=x[i+1]+x[i]/10;
            x[i]=x[i]%10;
            ad/=10;
          }while(ad);
        return *this;
    }
long long hugeN::operator %(long long d)// rezultat= nr. mare % long long
{
        long long r=0;
        int i;
        for(i=x[0];i>0;i--)
        {
            r=r*10+ x[i];
            r=r%d;
        }
        return r;
    }

int main()
{
    freopen("next.in","r",stdin);
    freopen("next.out","w",stdout);
    char c[nr_digit];
    int i,j,d;
    scanf("%s",&c);
    hugeN n(c);
    scanf("%lld",&d);
    long long r;
    r= n % d;
    d=d-r;
    n += d;
    n.print();
    return 0;
}