Cod sursa(job #527717)

Utilizator PlayLikeNeverB4George Marcus PlayLikeNeverB4 Data 1 februarie 2011 01:07:39
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>
#include <string>
#define maxn 1000050
#define ll long long

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

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

void imp()
{
	int r=0;
	for(i=1;i<=N;i++)
	{
		r=10*r+v[i];
		v[i]=r/D;
		r=r%D;
	}
	if(v[1]==0 && v[2]>0)
	{
		for(i=1;i<=N-1;i++)
			v[i]=v[i+1];
		v[N--]=0;
	}
}

void adun()
{
	int r; i=N;
	do
	{
		v[i]++; r=0;
		if(v[i]==10)
		{
			v[i]=0;
			r=1;
		}
		i--;
	}
	while(r>0);
	if(v[0]==1)
	{
		v[0]=0;	v[1]=1;
		N++; v[N]=0;
	}
}

void inm()
{
	int r=0,aux;
	for(i=N;i>=0 || r>0;i--)
	{
		aux=v[i];
		v[i]=(v[i]*D+r)%10;
		r=(aux*D)/10;
	}
	if(v[0]>0)
	{
		N++;
		for(i=N;i;i--)
			v[i]=v[i-1];
		v[0]=0;
	}
}

void afisare()
{
	for(i=1;i<=N;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();
	imp();
	adun();
	inm();
	afisare();
}