Pagini recente » Cod sursa (job #543973) | Cod sursa (job #1356883) | Cod sursa (job #2742343) | Cod sursa (job #1714239) | Cod sursa (job #113853)
Cod sursa(job #113853)
#include <stdio.h>
#include <string.h>
const int N_MAX = 1024;
int N[N_MAX], rez[N_MAX * 10], aux[N_MAX * 10];
char s[N_MAX];
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 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 MUL(int A[], int B[])
{
int i, j, t, C[N_MAX * 10];
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 afis(int v[])
{
for (int i = v[0]; i >= 1; i --) printf("%d", v[i]);
printf("\n");
}
int main()
{
freopen("sarpe.in", "r", stdin);
#ifndef _SCREEN_
freopen("sarpe.out", "w", stdout);
#endif
scanf("%s\n", s);
int l = strlen(s), i;
for (i = l - 1; i >= 0; i --) {
N[++ N[0]] = s[i] - '0';
}
if (N[0] == 1 && N[1] == 1) {
printf("2\n");
return 0;
} else {
memcpy(rez, N, sizeof(N));
mul(rez, 4);
aux[0] = 1, aux[1] = 2;
N[1] --;
i = 1;
while (N[i] == -1) {
N[i] = 9;
i ++;
N[i] --;
}
MUL(aux, N);
N[1] --;
i = 1;
while (N[i] == -1) {
N[i] = 9;
i ++;
N[i] --;
}
MUL(aux, N);
add(rez, aux);
}
for (i = rez[0]; i >= 1; i --) printf("%d", rez[i]);
printf("\n");
return 0;
}