Cod sursa(job #251755)

Utilizator thebest001Neagu Rares Florian thebest001 Data 3 februarie 2009 12:13:05
Problema Sarpe Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
//aici sunt definitiile
#include <stdio.h>
#include <math.h>
#include <string.h>
//aici sunt functiile
void sub(int A[], int B[])
{
      int i, t = 0;
      for (i = 1; i <= A[0]; i++)
      {
           t = A[i] - B[i] + t;
           if (t<0)
           {
				   A[i]=10+t;
				   t=-1;
           } else
        	   A[i]=t;

      }
      for (; A[0] > 1 && !A[A[0]]; A[0]--);
}

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

void mul(int A[], int B[])
{
      int i, j, t, C[10001];
      memset(C, 0, sizeof(C));
      for (i = 1; i <= A[0]; i++)
      {
              for (t=0, j=1; j <= B[0] || t; j++, t/=10)
                      C[i+j-1]=(t+=C[i+j-1]+A[i]*B[j])%10;
              if (i + j - 2 > C[0]) C[0] = i + j - 2;
      }
      for (i=1;i<=1001;i++)
    	  A[i]=C[i];
}

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

void citnrhuge(int n[])
{
	char c='0';
	int k=0;
	int a[1001];
	while (scanf("%c",&c)!=EOF)
	{
		k++;
		a[k]=c-'0';
	}
	int i;
	for(i=k;i>=1;i--)
		n[i]=a[i];
	n[0]=k;
}

void afisnrhuge(int a[])
{
	int i;
	for (i=a[0];i>=1;i--)
		printf("%d",a[i]);
}
//aici e mainu'
int main()
{
	//aici e declaratia fisierelor
	freopen("sarpe.in","r",stdin);
	freopen("sarpe.out","w",stdout);
//	int n;
	int n[10001];
	//aci e citirea
	citnrhuge(n);
// aa=4*n + 2(n-1)(n-2); (asta-i formula)
	int a[10001]={0},patru[]={1,4};
	add(a,patru);
	mul(a,n);
	int b[10001]={0};
	int c[10001];
	memcpy(c,n,sizeof(c));
	int unu[]={1,1};
	sub(c,unu);
	memcpy(b,c,sizeof(c));
	memcpy(c,n,sizeof(c));
	unu[1]=2;
	sub(c,unu);
	mul(b,c);
	mul(b,unu);
	add(a,b);
	afisnrhuge(a);
	return 0;
}