Cod sursa(job #39740)

Utilizator MarcvsHdrMihai Leonte MarcvsHdr Data 26 martie 2007 22:25:42
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
# include <stdio.h>
# include <string.h>

const long int MAXL=1000100;
char s[MAXL+10];
long long int nr[MAXL+1],len,d;

void convert()
{
long long int l=strlen(s);
s[l-1]=s[l];
l-=2;
long long int i=1;
while (l>=0)
	{
	nr[i]=(int)s[l]-(int)'0';
	i++;
	l--;
	}
len=i-1;
}

void citire()
{
FILE *f=fopen("next.in","r");
fgets(s,MAXL,f);
fscanf(f,"%lld",&d);
fclose(f);
}

void divide()
{
long long int l=len;
while (l)
	{
	while (nr[l]<=d&&l>1)
		{
		l--;
		nr[l]=nr[l+1]*10+nr[l];
		nr[l+1]=0;
		}
	nr[l-1]+=nr[l]%d*10;
	nr[l]/=d;
	l--;
	}
long long int i;
if (nr[0])
	{
	i=1;
	nr[i]++;
	while (nr[i]>=10)
		{
		nr[i+1]+=nr[i]/10;
		nr[i]%=10;
		i++;
		}
	}
}

void multiply()
{
long long int i;
for (i=1;i<=len;i++) nr[i]*=d;
for (i=1;i<=len+100;i++)
	if (nr[i]>=10)
		{
		nr[i+1]+=nr[i]/10;
		nr[i]%=10;
		}
}

void print()
{
FILE *g=fopen("next.out","w");
long long int l=len;
while (nr[l]==0) l--;
while (l)
	{
	fprintf(g,"%lld",nr[l]);
	l--;
	}
fprintf(g,"\n");
fcloseall();
}

int main()
{
citire();
convert();
divide();
multiply();
print();
return 0;
}