Cod sursa(job #527907)

Utilizator PlayLikeNeverB4George Marcus PlayLikeNeverB4 Data 1 februarie 2011 15:21:20
Problema Next Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 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,nrd;
short v[maxn],d[maxn];

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

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

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

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

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

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