Cod sursa(job #527866)

Utilizator PlayLikeNeverB4George Marcus PlayLikeNeverB4 Data 1 februarie 2011 14:11:13
Problema Next Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h>
#include <string>
#define maxn 1000050
#define ll long long

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

void transf()
{
	v[0]=strlen(aux)-1;
	for(i=1;i<=v[0];i++)
		v[i]=aux[i]-'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;
	}
}

int mod()
{
	int 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--)
		printf("%d",v[i]);
}

int main()
{
	freopen("next.in","r",stdin);
	freopen("next.out","w",stdout);
	scanf("%s\n",aux+1); aux[0]=' ';
	scanf("%lld",&D);
	transf();
	rest=mod();
	D=(D-rest)%D;
	transf2();
	adun();
	afisare();
}