Pagini recente » Borderou de evaluare (job #2321884) | Cod sursa (job #1173723) | Cod sursa (job #2986610) | Cod sursa (job #3124710) | Cod sursa (job #2155620)
#include <algorithm>
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("aladdin2.in");
ofstream out("aladdin2.out");
const int NMAX = 5000;
const int k = 1024;
int n, m;
int v[1 + NMAX];
int a[1 + NMAX];
void mult(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 sub(int a[], int b[]) {
int i, t = 0;
for(i = 1; i <= a[0]; i++) {
a[i] -= ((i <= b[0]) ? b[i] : 0) + t;
a[i] += (t = a[i] < 0) * 10;
}
while(1 < a[0] && !a[a[0]])
a[0]--;
}
int main()
{
in >> n >> m;
v[0] = v[1] = 1;
a[0] = a[1] = 1;
for(int i = 1; i <= n / 10; i++)
mult(v, k);
for(int i = 1; i <= n % 10; i++)
mult(v, 2);
for(int i = 1; i <= m / 10; i++)
mult(a, k);
for(int i = 1; i <= m % 10; i++)
mult(a, 2);
add(v, a);
fill(a, a + NMAX + 1, 0);
a[0] = 1;
a[1] = 2;
sub(v, a);
for(int i = v[0]; i >= 1; i--)
out << v[i];
in.close();
out.close();
return 0;
}