Pagini recente » Cod sursa (job #2359844) | Cod sursa (job #361767) | Cod sursa (job #1258301) | Monitorul de evaluare | Cod sursa (job #148469)
Cod sursa(job #148469)
#include <cstdio>
#include <cstring>
const int NC = 1500000;
int n[NC], t[NC], r[NC];
void scan ( int a[] ) {
char *s = new char[NC];
fgets(s,NC,stdin);
int i;
for (i = 0; s[i] != '\n'; ++i) {
a[i+1] = s[i]-'0';
}
a[0] = i;
}
void print ( int a[] ) {
for (int i = a[0]; i > 0; --i) printf("%d",a[i]);
printf("\n");
}
void add ( int a[], int b[], int c[] ) {
int i, t = 0;
for (i = 1; i <= a[0] || i <= b[0] || t; i++, t /= 10)
c[i] = (t += a[i] + b[i]) % 10;
c[0] = i - 1;
}
void dec ( int a[] ) {
int i, t = 0;
a[1] += (t = (a[1] -= 1 + t) < 0) * 10;
for (i = 1; i <= a[0]; i++)
a[i] += (t = (a[i] -= t) < 0) * 10;
for (; a[0] > 1 && !a[a[0]]; a[0]--);
}
void mul ( int a[], int b, int c[] ) {
int i, t = 0;
for (i = 1; i <= a[0] || t; i++, t /= 10)
c[i] = (t += a[i] * b) % 10;
c[0] = i - 1;
}
void mul ( int a[], int b[], int c[] ) {
int i, j, t;
memset(c, 0, sizeof(c));
for (i = 1; i <= a[0]; i++) {
for (t = 0, j = 1; j <= b[0] || t; j++, t /= 10)
c[i+j-1] = (t += c[i+j-1] + a[i]*b[j])%10;
if (i+j-2 > c[0]) c[0] = i+j-2;
}
}
int main() {
freopen("sarpe.in","rt",stdin);
freopen("sarpe.out","wt",stdout);
scan(n);
if (n[0] == 1 && n[1] == 1) {
printf("2\n");
return 0;
} else
if (n[0] == 1 && n[1] == 2) {
printf("8\n");
return 0;
}
mul(n,4,r);
dec(n);
mul(n,2,t);
dec(n);
mul(t,n,t);
add(r,t,r);
print(r);
}