Pagini recente » Cod sursa (job #1099931) | Cod sursa (job #2404908) | Cod sursa (job #1195299) | Cod sursa (job #2383936) | Cod sursa (job #135229)
Cod sursa(job #135229)
#include<cstdio>
#include<cstring>
#define max 10010
int v[max];
void cit()
{
char tmp[max];
int i;
scanf("%s", tmp+1);
v[0] = strlen(tmp+1);
for(i=1; i<=v[0]; i++)
v[i] = tmp[v[0]-i+1]-'0';
}
void print(int b[])
{
int i;
for(i=b[0]; i>0; i--)
printf("%d", b[i]);
printf("\n");
}
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 mulsc(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[max];
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 sub(int A[], int B)
{
int i;
A[1] -= B;
if(A[1] < 0)
{
A[1] +=10;
for(i=2;;i++)
if(!A[i])
A[i]=9;
else
{
--A[i];
return;
}
}
}
int main()
{
freopen("sarpe.in", "r", stdin);
freopen("sarpe.out", "w", stdout);
cit();
int b[max], c[max];
memcpy(b, v, sizeof(v));
memcpy(c, v, sizeof(v));
mulsc(v, 4);
sub(b, 1);
mulsc(b, 2);
sub(c, 2);
mul(b, c);
add(v, b);
print(v);
return 0;
}