Cod sursa(job #1777215)

Utilizator Dragne.Andrei11Dragne Andrei Dragne.Andrei11 Data 12 octombrie 2016 09:50:20
Problema Next Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <cstdio>
#include <cstring>
const int nmax=1000000;

using namespace std;

class Hugen
{
	private:
		int x[nmax+5];
	public:
		Hugen()
		{
			x[0]=1;
			for(register int i=1;i<=nmax;i++)
				x[i]=0;
		}
		Hugen(long long nr)
		{
			for(register int i=0;i<=nmax;i++)
				x[i]=0;
			do
			{
				x[++x[0]]=nr%10;
				nr/=10;
			}while(nr);
		}
		Hugen(const Hugen&other)
		{
			for(register int i=1;i<=nmax;i++)
				x[i]=0;
			memcpy(x, other.x, sizeof(other.x));
		}
		Hugen(char *s)
		{
			x[0]=strlen(s);
			for(register int i=1;i<=x[0];i++)
				x[i]=s[x[0]-i]-'0';
		}
		void print()
		{
			int i;
			for(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)
{
	Hugen temp;
	Hugen other(k);
	temp.x[0]=x[0]>other.x[0]?x[0]:other.x[0];
	int aux, tr;
	for(register int i=1;i<=temp.x[0];i++)
	{
		aux=x[i]+tr+other.x[i];
		temp.x[i]=aux%10;
		tr=aux/10;
	}
	if(tr)
		temp.x[++temp.x[0]]=tr;
	return temp;
}
long long Hugen::operator%(long long k)
{
	int i;
	long long r=0;
	for(i=x[0];i>=1;i--)
		r=(r*10+x[i])%k;
	return r;
}
char s[nmax+1];

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