Pagini recente » Cod sursa (job #3260301) | Cod sursa (job #396581) | Cod sursa (job #2667403) | Cod sursa (job #2648647) | Cod sursa (job #1757951)
#include <cstdio>
#include <algorithm>
#include <string.h>
using namespace std;
char s[1005];
int v[3005];
int a[3005], b[3005], c[3005];
void mult(int v[], int x){
int i,T;
T = 0;
for(i = 1;i <= v[0];i++){
v[i] *= x;
v[i] += T;
T = v[i]/10;
v[i] %= 10;
}
while(T){
v[++v[0]] = T%10;
T /= 10;
}
}
void decrease(int v[], int x){
int i,T;
T = x;
for(i = 1;i <= v[0];i++){
v[i] -= T;
if(v[i] < 0){
v[i] += 10;
T = 1;
}else{
T = 0;
}
}
while(v[v[0]] == 0){
v[0]--;
}
}
void multMat(){
c[0] = a[0] + b[0] - 1;
int i,j;
for(i = 1;i <= a[0];i++){
for(j = 1;j <= b[0];j++){
c[i+j-1] += a[i]*b[j];
}
}
int T = 0;
for(i = 1;i <= c[0];i++){
c[i] += T;
T = c[i]/10;
c[i] %= 10;
}
if(T){
c[++c[0]] = T;
}
}
void add(){
int i,T;
T = 0;
if(v[0] > c[0]){
for(i = 0;i <= v[0];i++){
swap(v[i], c[i]);
}
}
for(i = 1;i <= c[0];i++){
c[i] += v[i] + T;
T = c[i]/10;
c[i] %= 10;
}
if(T){
c[++c[0]] = T;
}
}
void Vprint(int a[]){
int i;
for(i = a[0];i >= 1;i--){
printf("%d", a[i]);
}
printf("\n");
}
int main()
{
freopen("sarpe.in", "r", stdin);
freopen("sarpe.out", "w", stdout);
int n,i;
scanf("%s", s+1);
n = strlen(s+1);
for(i = 1;i <= n;i++){
v[i] = s[i] - '0';
}
int j;
for(i = 1,j = n;i < j;i++, j--){
swap(v[i], v[j]);
}
v[0] = n;
if(v[0] == 1 && v[1] == 1){
printf("1");
return 0;
}
if(v[0] == 1 && v[1] == 2){
printf("8");
return 0;
}
for(i = 0;i <= n;i++){
a[i] = v[i];
b[i] = v[i];
}
mult(v, 4);
decrease(a, 1);
decrease(b, 2);
mult(a, 2);
multMat();
add();
Vprint(c);
return 0;
}