Cod sursa(job #39797)

Utilizator MarcvsHdrMihai Leonte MarcvsHdr Data 26 martie 2007 22:58:18
Problema Next Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
# include <stdio.h>
# include <string.h>

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

void convert()
{
long long int l=strlen(s);
s[l-1]=s[l];
l-=2;
len=l;
}

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

void divide()
{
long long int l=0,aux=0;int a2;
while (l<=len)
	{
	while (aux<=d&&l<=len)
		{
		aux=aux*10+(int)s[l]-48;
		l++;
		}
	nr[++len2]=aux/d;
	aux%=d;
	while (l<=len)
		{
		aux=aux*10+(int)s[l]-48;
		nr[++len2]=aux/d;
		aux%=d;
		l++;
		}
	}
long long int i;
for (i=1;i<=len2/2;i++)
	{
	a2=nr[i];nr[i]=nr[len2-i+1];nr[len2-i+1]=a2;
	}
if (aux)
	{
	i=1;
	nr[i]++;
	while (nr[i]>=10)
		{
		nr[i+1]+=nr[i]/10;
		nr[i]%=10;
		i++;
		}
	if (i>len2) len2=i;
	}
}

void multiply()
{
long long int i,aux=0;
for (i=1;i<=len2;i++)
	{
	aux+=nr[i]*d;
	nr[i]=aux%10;
	aux/=10;
	}
len2+1;
while (aux)
	{
	nr[i]=aux%10;
	aux/=10;
	i++;
	}
len2=i-1;
}

void print()
{
FILE *g=fopen("next.out","w");
while (len2)
	{
	fprintf(g,"%d",nr[len2]);
	len2--;
	}
fprintf(g,"\n");
fcloseall();
}

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