Pagini recente » Cod sursa (job #3121887) | Cod sursa (job #3199735) | Cod sursa (job #1007808) | Cod sursa (job #229263) | Cod sursa (job #67495)
Cod sursa(job #67495)
#include <stdio.h>
#include <string.h>
#define MAXL 2005
char s[MAXL];
int N[MAXL], aux[MAXL];
inline 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;
}
int C[MAXL];
inline void mul( int A[], int B[] )
{
memset( C, 0, sizeof(C) );
int i, j, t = 0;
for (i = 1; i <= A[0]; i++)
{
for (j = 1, t = 0; 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) );
}
inline void print( int A[] )
{
int i = 0;
for (i = A[0]; i; i--)
printf("%d", A[i]);
printf("\n");
}
int main()
{
freopen("sarpe.in", "rt", stdin);
freopen("sarpe.out", "wt", stdout);
fgets(s, MAXL, stdin);
int i;
for (i = 0; s[i] && '0' <= s[i] && s[i] <= '9'; i++);
for (i--; i >= 0; i--)
N[ ++N[0] ] = s[i] - '0';
if (N[0] == 1 && N[1] == 1)
{
printf("2\n");
return 0;
}
memcpy(aux, N, sizeof(aux));
N[1]--;
for (int i = 1; i <= N[0] && N[i] < 0; i++)
N[i] += 10,
N[i + 1]--;
for (; N[0] && !N[ N[0] ]; N[0]--);
mul(N, aux);
mul(N, 2);
N[1] += 4;
for (i = 1; i <= N[0] && N[i] >= 10; i++)
N[i] -= 10,
N[i + 1]++;
if (N[ N[0] + 1 ])
N[0]++;
print(N);
return 0;
}