Pagini recente » Cod sursa (job #2841967) | Cod sursa (job #3201184) | Cod sursa (job #3263286) | Cod sursa (job #1381115) | Cod sursa (job #1109638)
#include <cstdio>
#include <algorithm>
#include <cstring>
#define NMAX 2007
using namespace std;
int a[NMAX], b[NMAX], c[NMAX], d[NMAX], e[NMAX];
char s[NMAX];
void scad(int H[], int G[]){
int T = 0;
for(int i = 1; i <= H[i]; ++i){
H[i] = H[i] - G[i] - T;
if(H[i] < 0)
T = 1;
else
T = 0;
H[i] += T * 10;
}
while(H[H[0]] == 0)
--H[0];
}
void adun(int H[], int G[]){
int T = 0;
H[0] = max(H[0], G[0]);
for(int i = 1; i <= H[0]; ++i){
H[i] += G[i] + T;
T = H[i] / 10;
H[i] %= 10;
}
while(T > 0){
H[++H[0]] = T % 10;
T /= 10;
}
}
void prod(int H[], int x){
int T = 0;
for(int i = 1; i <= H[0]; ++i){
H[i] = H[i] * x + T;
T = H[i] / 10;
H[i] %= 10;
}
while(T > 0){
H[++H[0]] = T % 10;
T /= 10;
}
}
void prodH(int H[], int G[], int J[]){
int T = 0;
J[0] = H[0] + G[0] - 1;
for(int i = 1; i <= H[0]; ++i)
for(int j = 1; j <= G[0]; ++j)
J[i + j - 1] += H[i] * G[j];
for(int i = 1; i <= J[0]; ++i){
J[i] += T;
T = J[i] / 10;
J[i] %= 10;
}
while(T > 0){
J[++J[0]] = T % 10;
T /= 10;
}
}
int main(){
freopen("sarpe.in", "r", stdin);
freopen("sarpe.out", "w", stdout);
gets(s + 1);
a[0] = b[0] = d[0] = strlen(s + 1);
for(int i = a[0]; i >= 1; --i){
a[a[0] - i + 1] = s[i] - '0';
b[b[0] - i + 1] = s[i] - '0';
d[d[0] - i + 1] = s[i] - '0';
}
if(a[0] == a[1] == 1){
printf("%d", 1);
return 0;
}
c[0] = c[1] = 1;
scad(b, c);
c[0] = 1;
c[1] = 2;
scad(d, c);
prodH(b, d, e);
prod(e, 2);
prod(a, 4);
adun(a, e);
for(int i = a[0]; i >= 1; --i)
printf("%d", a[i]);
return 0;
}