Pagini recente » Cod sursa (job #1551621) | Cod sursa (job #1241064) | Cod sursa (job #1178098) | Cod sursa (job #2814898) | Cod sursa (job #74049)
Cod sursa(job #74049)
#include <stdio.h>
#include <string.h>
#define MAX_C 2048
#define base 10
typedef int num[MAX_C];
num N, R, PATRU, DOI;
void mul(num A, num B)
{
int i, j, t;
num C;
memset(C, 0, sizeof(C));
for(i = 1; i <= A[0]; i++)
{
for(j = 1, t = 0; j <= B[0] || t; j++, t /= base)
C[i+j-1] = (t += C[i+j-1]+A[i]*B[j]) % base;
if(i+j-2 > C[0])
C[0] = i+j-2;
}
memcpy(A, C, sizeof(C));
}
void dec(num A)
{
int i = 1;
while(A[i] == 0)
A[i] = 9, i++;
A[i]--;
if(A[A[0]] == 0)
A[0]--;
}
void add(num A, num B)
{
int i, t = 0;
for(i = 1; i <= A[0] || i <= B[0] || t; i++, t /= base)
A[i] = (t += A[i]+B[i]) % base;
A[0] = i-1;
}
void read_and_solve(void)
{
int i, j;
char sir[1024];
scanf("%s\n", &sir);
N[0] = strlen(sir);
for(i = 0; i < N[0]; i++)
N[N[0]-i] = sir[i]-'0';
memcpy(R, N, sizeof(num));
if(N[0] == 1)
{
if(N[1] == 1)
{
printf("2\n");
return ;
}
if(N[2] == 2)
{
printf("4\n");
return ;
}
}
dec(N);
mul(R, N);
DOI[0] = 1, DOI[1] = 2;
mul(R, DOI);
PATRU[0] = 1, PATRU[1] = 4;
add(R, PATRU);
for(i = R[0]; i >= 1; i--)
printf("%d", R[i]);
printf("\n");
}
int main(void)
{
freopen("sarpe.in", "rt", stdin);
freopen("sarpe.out", "wt", stdout);
read_and_solve();
return 0;
}