Cod sursa(job #527721)

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

char aux[maxn];
ll D;
int i,N,v[maxn];
bool rest=false;

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;
	}
	if(r>0) rest=true;
}

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;
	for(i=N;i;i--)
	{
		v[i]=v[i]*D+r;
		r=v[i]/10;
		v[i]=v[i]%10;
	}
	while(r)
	{
		N++;
		v[0]=r%10;
		r=r/10;
		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();
	if(rest) adun();
	inm();
	afisare();
}