Pagini recente » Cod sursa (job #2003226) | Monitorul de evaluare | Cowfood | Cod sursa (job #2751645) | Cod sursa (job #114297)
Cod sursa(job #114297)
#include <stdio.h>
#include <string.h>
const int n_max = 3010;
int a[n_max],
b[n_max],
c[n_max];
long long sol;
int i, n, j;
void add(int A[], int B[])
{
int i, t = 0;
for (i = 1; i <= A[0] || i <= B[0] || t; ++ i)
{
t += A[i] + B[i];
A[i] = t%10;
t = t/10;
}
A[0] = i-1;
}
void sub (int A[], int B[])
{
int i, t;
for (i = 1; i <= A[0]; ++ i)
{
t = A[i] - B[i];
if (t < 0)
{
t +=10;
-- A[i+1];
}
A[i] = t;
}
for (; A[A[0]] == 0; -- A[0])
;
}
void mul(int A[], int B[])
{
int i, j, t = 0, C[n_max];
for (i = 0; i < n_max; ++ i)
C[i] = 0;
for (i = 1; i <= A[0]; ++ i)
{
t = 0;
for (j = 1; j <= B[0] || t; ++ j)
{
t += C[j + i - 1] + (A[i] * B[j]);
C[j + i -1] = t % 10;
t = t/10;
}
}
C[0] = i + j;
for (; C[C[0]] == 0 && C[0] > 0; -- C[0])
;
memcpy(A, C, sizeof(C));
}
void read(int A[])
{
int i;
char s[2000];
scanf("%s", s);
A[0] = strlen(s);
for (i = A[0] - 1; i >= 0; -- i)
A[A[0] - i] = s[i] - '0';
}
void print(int A[])
{
int i;
for (i = A[0] ; i > 0; --i)
printf("%d", A[i]);
printf("\n");
fflush(stdout);
}
int main()
{
freopen("sarpe.in","r",stdin);
freopen("sarpe.out","w",stdout);
read(a);
if (a[0] == 1 && a[1] == 1)
{
printf("1\n");
return 0;
}
//print(a);
memcpy(b,a, sizeof(a));
c[0] = 1;
c[1] = 1;
sub(b,c);
//print(b);
memset(c,0,sizeof(c));
c[0] = 1;
c[1] = 2;
mul(a,b);
//print(a);
mul(a,c);
//print(a);
memset(c,0,sizeof(c));
c[0] = 1;
c[1] = 4;
add(a,c);
print(a);
return 0;
}