Cod sursa(job #1748277)

Utilizator Cojocaru_Andrei_CristianCojocaru Andrei Cristian Cojocaru_Andrei_Cristian Data 26 august 2016 11:59:20
Problema Next Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
const int NMAX_DIGIT=1000005;
char s[1000005];
class HugeN
{
	private:int x[NMAX_DIGIT];
	public:HugeN()
	      {
	      	memset(x,0,sizeof(x));
	      	x[0]=1;
	      }
	      HugeN(char *s)
	      {
	      	int l=strlen (s);
	      	memset(x,0,sizeof(x));
	      	x[0]=l;
	      	for(int i=l-1;i>=0;i--)
			{
			     x[l-i]=s[i]-48;	
			}
	      }
	      long long  operator %(long long k);
	      HugeN operator +=(long long k);
	      void print()
	      {
	      	for(int i=x[0];i>=1;i--)
			{
				printf("%d",x[i]);
			}
			printf("\n");
	      }
};

long long HugeN:: operator % (long long k)
{
	long long r=0;
	for(int i=x[0];i>=1;i--)
	{
		r=r*10+x[i];
		r=r%k;
	}
}
HugeN HugeN ::operator +=(long long k)
{
	long long tr=k,aux;
	for(int 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%10;tr/=10;
	}
	return *this;
}
int main()
{   freopen("next.in","r",stdin);
	freopen("next.out","w",stdout);
    long long D,r;
    gets(s);
    scanf("%lld",&D);
    HugeN N(s);
    r=N%D;
    if(r)
	{
		N+=D-r;
	}
	N.print();
    return 0;
}