Pagini recente » Cod sursa (job #1771357) | Cod sursa (job #1386146) | Cod sursa (job #380140) | Cod sursa (job #514843) | Cod sursa (job #493414)
Cod sursa(job #493414)
#include<cstdio>
typedef int Huge[1<<20];
Huge rez,n,aux1,aux2,aux;
char s[1<<10];
void scad(Huge A,Huge 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]=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 adun(Huge A,Huge 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 inm(Huge H,int X)
{
int i,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)
{
H[++H[0]]=T%10;
T/=10;
}
}
void editstr()
{
int aux,st,dr;
for(int i=0;s[i];i++)
n[++n[0]]=s[i]-'0';
st=0;
dr=n[0]+1;
while(++st<=--dr)
{
aux=n[st];
n[st]=n[dr];
n[dr]=aux;
}
}
void mult(Huge A, Huge B, Huge C)
{
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 atrib(Huge A,Huge B)
{
for(int i=1;i<=A[0];i++)
A[i]=0;
A[0]=B[0];
for(int i=1;i<=A[0];i++)
A[i]=B[i];
}
void afis(Huge A)
{
for(int i=A[0];i>=1;i--)
printf("%d",A[i]);
}
int main()
{
freopen("sarpe.in","r",stdin);
freopen("sarpe.out","w",stdout);
gets(s);
editstr();
if(!(n[0]==1 && n[1]==1))
{
atrib(rez,n);
inm(rez,4);
atrib(aux1,n);
Huge x;
x[0]=1;
x[1]=1;
scad(n,x);
atrib(aux2,n);
atrib(n,aux1);
x[0]=1;
x[1]=2;
scad(n,x);
atrib(aux1,n);
mult(aux1,aux2,aux);
inm(aux,2);
adun(rez,aux);
afis(rez);
}
else printf("1");
return 0;
}