Pagini recente » Cod sursa (job #2646167) | Cod sursa (job #319570) | Cod sursa (job #1675783) | Cod sursa (job #622369) | Cod sursa (job #112245)
Cod sursa(job #112245)
#include <stdio.h>
#include <string.h>
#define MAXC 1024
#define base 1000000
#define display "%06d"
typedef int num[MAXC];
int N, M[MAXC];
num res, P2;
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 mul(num A, int B)
{
int i, t = 0;
for(i = 1; i <= A[0] || t; i++, t /= base)
A[i] = (t += A[i]*B) % base;
A[0] = i-1;
}
void read_and_solve(void)
{
int i, j, k;
num aux;
scanf("%d\n", &N);
for(i = 1; i <= N; i++)
scanf("%d\n", &M[i]);
P2[0] = P2[1] = 1;
res[0] = res[1] = 1, mul(res, M[1]);
for(i = 2; i <= N; i++)
{
mul(P2, 2), memcpy(aux, P2, sizeof(num)), mul(aux, M[i]);
add(res, aux);
}
j = res[0];
printf("%d", res[j]);
for(i = j-1; i >= 1; i--)
printf(display, res[i]);
printf("\n");
}
int main(void)
{
freopen("hanoig.in", "rt", stdin);
freopen("hanoig.out", "wt", stdout);
read_and_solve();
return 0;
}