Pagini recente » Cod sursa (job #2819231) | Cod sursa (job #2715992) | Cod sursa (job #2223020) | Cod sursa (job #1027266) | Cod sursa (job #206104)
Cod sursa(job #206104)
//4N + 2(N-1)(N-2)
#include <stdio.h>
#define BASE 10
long int n,m,p,s;
long int H[2003];
long int A[2003];
long int B[2003];
long int unu[2003];
long int C[2003];
int L,i,aux,x;
char c;
void AtribValue(long int *H, long int X) {
H[0] = 0;
while (X) {
++H[0];
H[H[0]] = X % BASE;
X /= BASE;
}
}
void Mult(long int *H,long int X)
/* H <- H*X */
{ long int i;
long int T=0;
for (i=1;i<=H[0];i++)
{ H[i]=H[i]*X+T;
T=H[i]/10;
H[i]=H[i]%10;
}
while (T) /* Cat timp exista transport */
{ H[++H[0]]=T%10;
T/=10;
}
}
void Subtract(long int *A, long int *B)
/* A <- A-B */
{ int i, T=0;
for (i=B[0]+1;i<=A[0];) B[i++]=0;
for (i=1;i<=A[0];i++)
A[i]+= (T=(A[i]-=B[i]+T)<0) ? 10 : 0;
/* Adica A[i]=A[i]-(B[i]+T);
if (A[i]<0) T=1; else T=0;
if (T) A[i]+=10; */
while (!A[A[0]]) A[0]--;
}
void Add(long int *A, long int *B)
/* 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;
}
void MultHuge(long int *A, long int *B, long int *C)
/* 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;
}
void AtribHuge(long int *H, long int *X) {
int i;
for (i = 0; i <= X[0]; ++i) {
H[i] = X[i];
}
}
int main(){
FILE *f = fopen("sarpe.in","r");
int L = 0;
while (!feof(f)) {
x = fscanf(f,"%c",&c);
if (x==-1) break;
H[++L] = c-48;
}
H[0]=L;
for (i=1;i<=L/2;i++) {
aux = H[i];
H[i] = H[L-i+1];
H[L-i+1] = aux;
}
H[0] = L;
fclose(f);
AtribHuge(A,H);
Mult(A,4);
AtribValue(unu,1);
Subtract(H,unu);
AtribHuge(B,H);
Subtract(H,unu);
MultHuge(B,H,C);
Mult(C,2);
Add(A,C);
FILE *g = fopen("sarpe.out","w");
for (int i=A[0];i>=1;i--)
fprintf(g,"%ld",A[i]);
fclose(g);
return 0;
}