Cod sursa(job #1207683)

Utilizator whodatLetitia Radulescu whodat Data 13 iulie 2014 16:22:21
Problema Progresie Scor 0
Compilator c Status done
Runda Arhiva ICPC Marime 1.42 kb
#include<stdio.h>

int x[30], x1[30], x2[30], xpatrat[30];


//atriibuire
void AtribValue(int H[30], unsigned long X) {
  H[0] = 0;
  while (X) {
      ++H[0];
      H[H[0]] = X % 10;
      X /= 10;
  }
}

//adunare
void Add(int A[30], int B[30])
/* A <- A+B */
{ int i,T=0;

  if (B[0]>A[0])
    { for (i=A[0]+1;i<=B[0];) A[i++]=0;
      A[0]=B[0];
    }
    else for (i=B[0]+1;i<=A[0];) B[i++]=0;
  for (i=1;i<=A[0];i++)
    { A[i]+=B[i]+T;
      T=A[i]/10;
      A[i]%=10;
    }
  if (T) A[++A[0]]=T;
}

//inmultire
void MultHuge(int A[30], int B[30], int C[30])
/* C <- A x B */
{ int i,j,T=0;

  C[0]=A[0]+B[0]-1;
  for (i=1;i<=A[0]+B[0];) C[i++]=0;
  for (i=1;i<=A[0];i++)
    for (j=1;j<=B[0];j++)
      C[i+j-1]+=A[i]*B[j];
  for (i=1;i<=C[0];i++)
    { T=(C[i]+=T)/10;
      C[i]%=10;
    }
  if (T) C[++C[0]]=T;
}

 
int main()
{
	
    int T, N;
	int i, j;

	unsigned long long R, X, aux;
 
    FILE *f = fopen("progresie.in", "r");
    FILE *g = fopen("progresie.out", "w");
 
    fscanf(f, "%d", &T);
 
    for(j=1;j<=T;j++)
    {
        fscanf(f, "%d%u", &N, &R);
		
		X = (N-1)*R + 1;
		
		aux = X-1;
		AtribValue(x, aux);
		
		AtribValue(x1, X);
		
		MultHuge(x, x1, xpatrat);
		
		AtribValue(x2, 1);
		
		Add(xpatrat, x2);
		
		for(i=xpatrat[0];i>=1;i--)
			fprintf(g, "%d", xpatrat[i]);
		
		fprintf(g, "\n");
		
		
	}
	
	
    return 0;
}