Pagini recente » Cod sursa (job #564480) | Cod sursa (job #1978697) | Cod sursa (job #645523) | Cod sursa (job #370291) | Cod sursa (job #187663)
Cod sursa(job #187663)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int rez[3000],v[1100],ax2[1100],ax3[1100];
char cit[11000],*s;
void mul(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[1100];
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;
}
memcpy(A, C, sizeof(C));
}
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 scan()
{
freopen("sarpe.in", "r",stdin);
freopen("sarpe.out", "w",stdout);
gets(cit);
s=cit;
v[0]=strlen(s);
for(int i=1;i<=v[0];++i)
v[v[0]+1-i]=s[i-1]-'0';
}
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) * 10;
for (; A[0] > 1 && !A[A[0]]; A[0]--);
}
void solve()
{
if(v[0]==1 && v[1]==1)
{
printf("%d\n", 1);
return;
}
ax2[0]=ax3[0]=1;
ax2[1]=2;
ax3[1]=1;
for(int i=0;i<=v[0];++i)
rez[i]=v[i];
mul(rez,4);
sub(v,ax3);
Mul(ax2,v);
sub(v,ax3);
Mul(ax2,v);
add(ax2,rez);
for(int i=rez[0];i>=1;--i)
printf("%d", rez[i]);
//4N + 2(N-1)(N-2)
}
int main()
{
scan();
solve();
return 0;
}