Pagini recente » Monitorul de evaluare | Profil crina_tomi | Cod sursa (job #1536091) | Cod sursa (job #2078170) | Cod sursa (job #204533)
Cod sursa(job #204533)
#include <stdio.h>
#define BAZA 10000
#define N_MAX 20000010
int N;
int REZ[N_MAX];
int REZ1[N_MAX];
int REZ2[N_MAX];
int REZ3[N_MAX];
int REZ4[N_MAX];
int REZ5[N_MAX];
int REZ6[N_MAX];
void inmultire_patru(int A[])
{
int i,t=0;
for (i=1;i<=A[0] || t;++i,t/=BAZA)
A[i]=(t+=A[i]*4)%BAZA;
A[0]=i-1;
}
void inmultire_doi(int A[])
{
int i,t=0;
for (i=1;i<=A[0] || t;++i,t/=BAZA)
A[i]=(t+=A[i]*2)%BAZA;
A[0]=i-1;
}
void adunare(int A[],int B[],int C[])
{
int i,t=0;
for (i=1;i<=A[0] || i<=B[0] || t;++i,t/=BAZA)
C[i]=(t+=A[i]+B[i])%BAZA;
C[0]=i-1;
}
void inmultire(int A[],int B[],int C[])
{
int i,t=0;
for (i=1;i<=A[0] || i<=B[0] || t;++i,t/=BAZA)
C[i]=(t+=A[i]*B[i])%BAZA;
C[0]=i-1;
}
void sub(int A[],int B[])
{
int i,t=0;
for (i=1;i<=A[0];++i)
A[i]+=(t=(A[i]-=B[i]+t)<0)*BAZA;
for (;A[0]>1 && !A[A[0]];--A[0]);
}
void AtribValue(int A[], unsigned long X)
{
A[0]=0;
while (X)
{
++A[0];
A[A[0]]=X%BAZA;
X/=BAZA;
}
}
int main()
{
int i;
freopen("sarpe.in","rt",stdin);
scanf("%d", &N);
AtribValue(REZ,N);
inmultire_patru(REZ);
AtribValue(REZ1,N);
AtribValue(REZ2,N);
REZ3[1]=1;
REZ4[1]=2;
sub(REZ1,REZ3);
sub(REZ2,REZ4);
inmultire(REZ1,REZ2,REZ5);
inmultire_doi(REZ5);
adunare(REZ,REZ5,REZ6);
freopen("sarpe.out","wt",stdout);
printf("%d", REZ6[REZ6[0]]);
for (i=REZ6[0]-1;i;--i)
printf("%04d", REZ6[i]);
return 0;
}