Cod sursa(job #527898)

Utilizator PlayLikeNeverB4George Marcus PlayLikeNeverB4 Data 1 februarie 2011 15:02:29
Problema Next Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>
#include <string>
#define maxn 1000050
#define ll long long
using namespace std;
ifstream fin("next.in");
ofstream fout("next.out");

char aux[maxn];
ll D,rest;
int i,N;
short v[maxn],d[maxn];

void transf()
{
	v[0]=strlen(aux);
	for(i=1;i<=v[0];i++)
		v[i]=aux[i-1]-'0';
}

void transf2()
{
	int aux;
	for(i=1;D;D/=10,i++)
		d[i]=D%10;
	d[0]=i-1;
	for(i=1;i<=v[0]/2;i++)
	{
		aux=v[i];
		v[i]=v[v[0]-i+1];
		v[v[0]-i+1]=aux;
	}
}

ll mod()
{
	ll r=0;
	for(i=1;i<=v[0];i++)
		r=(10*r+v[i])%D;
	return r;
}

void adun()
{
	int nr,r=0;
	if(v[0]>d[0]) nr=v[0];
	else nr=d[0];
	for(i=1;i<=nr;i++)
	{
		v[i]=(r+=v[i]+d[i])%10;
		r/=10;
	}
	while(r>10)
	{
		v[++v[0]]=r%10;
		r/=10;
	}
}

void afisare()
{
	for(i=v[0];i;i--)
		fout << v[i];
}

int main()
{
	fin >> aux;
	fin >> D;
	transf();
	rest=mod();
	D=(D-rest)%D;
	transf2();
	adun();
	afisare();
}