Cod sursa(job #37547)

Utilizator slayer4uVictor Popescu slayer4u Data 25 martie 2007 10:51:12
Problema Next Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 4, Clasa a 9-a si gimnaziu Marime 1.33 kb
#include<stdio.h>
#include<string.h>

char s[1000010];
long long d;
int n[1000010],o[1000010],l[1000010],k,i;

void div(int A[], long long B)
{
      int i;
	  long long t=0;
	  long long p=0;
      for (i = A[0]; i > 0; i--, t %= B)
	  {
              p = (t = t * 10 + A[i]) / B;
			  A[i]=p;
	  }
      for (; A[0] > 1 && !A[A[0]]; A[0]--);
}

void mul(int A[], long long B)
{
      int i;
	  long long p=0,t=0;
      for (i = 1; i <= A[0] || t; i++, t /= 10)
              p = (t += A[i] * B) % 10, A[i]=p;
      A[0] = i - 1;
}

void print(int x[])
{
	for (int i=x[0];i>=1;i--)
		printf("%ld",x[i]);
	printf("\n");
}
int comp(int a[], int b[])
{
	if (a[0]!=b[0]) 
		return -1;
	for (int i=1;i<=a[0];i++)
		if (a[i]!=b[i]) return -1;
	return 0;
}

int main()
{
	freopen ("next.in","rt",stdin);
	freopen ("next.out","wt",stdout);
	scanf("%s",&s);
	scanf("%lld",&d);
	k=strlen(s);
	n[0]=k;
	l[0]=k;
	for (i=k-1;i>=0;i--)
		if (s[i]>='0' && s[i]<='9') 
			n[k-i]=s[i]-'0',l[k-i]=s[i]-'0';

	i=0;
	div(l,d);
	for (i=0;i<=l[0];i++)
		o[i]=l[i];
	mul(l,d);
	if (comp(l,n)==0)
		print(n);
	else
	{
		o[1]++;
		for (i=1;i<=o[0];i++)
		{
			if (o[i]==10)
			{
				o[i]=0,o[i+1]++;
				if (i==o[0])
					o[0]++;
			}
			else
				break;
		}

		mul(o,d);
		print(o);
	}
	return 0;
}