Cod sursa(job #490217)

Utilizator unknownliviuMaria Liviu Valentin unknownliviu Data 5 octombrie 2010 16:16:09
Problema Next Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<fstream>
#include<iostream>
using namespace std;
ifstream in("next.in");
ofstream out("next.out");
const int N=1000010;
char a[N];
int z[N];
long long d;
void read()
{
	in.getline(a,N);
	in>>d;
}
void invers(int t[N])//n=vector size
{
	int aux;
	for(int i=1,j=t[0];i<j;++i,--j)
	{
		aux = t[i];
		t[i] = t[j];
		t[j] = aux;
	}
}
void convert()
{
	int i;
	z[0]=0;
	for(i=0;a[i]!=0;i++)
		z[++z[0]]=a[i]-'0';
}
long long mod(int x[N])
{
	long long r=0;
	//cout<<x[0]<<"\n"<<d<<"\n";
	for(int i=1;i<=x[0];i++)
	{
		r=r*10+x[i];
		r%=d;
		//cout<<r;
	}
	return r;
}
void suma(int x[N],long long y)
{
	long long i,aux,t=y;
	for(i=1;i<=x[0] || t!=0;i++)
	{
		aux=t+x[i];
		x[i]=aux%10;
		t=aux/10;
	}
	x[0]=i-1;
}
void afis(int x[N])
{
	for( int i=1;i<=x[0];i++)
		out<<x[i];
}

int main()
{
	long long rest=0;
	read();
	convert();
	//out<<mod(z);
	rest=mod(z);
	if(rest==0)
		out<<a;
	else
	{
		invers(z);
		suma(z,d-rest);
		invers(z);
		afis(z);
	}
	return 0;
}