Pagini recente » Cod sursa (job #2163624) | Cod sursa (job #474278) | Cod sursa (job #1326447) | Cod sursa (job #1922545) | Cod sursa (job #1621487)
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
const int base = 10000;
class big_int {
public:
int v[705];
big_int(int c = -1) {
memset(v, 0, sizeof v);
if (c != -1)
v[0] = 1, v[1] = c;
}
big_int operator+(const big_int &b) const {
big_int ans;
ans.v[0] = max(v[0], b.v[0]);
int tr = 0;
for (int i = 1; i <= ans.v[0]; ++ i) {
ans.v[i] = v[i] + b.v[i] + tr;
tr = ans.v[i] / base;
ans.v[i] %= base;
}
if (tr)
ans.v[++ ans.v[0]] = tr;
return ans;
}
big_int operator-(const big_int &b) const {
big_int ans;
ans.v[0] = v[0];
int tr = 0;
for (int i = 1; i <= ans.v[0]; ++ i) {
ans.v[i] = v[i] - b.v[i] - tr;
if (ans.v[i] < 0) {
ans.v[i] += base;
tr = 1;
}
else
tr = 0;
}
while (ans.v[0] > 1 && !ans.v[ans.v[0]])
-- ans.v[0];
return ans;
}
big_int operator*(const big_int &b) const {
big_int ans;
ans.v[0] = v[0] + b.v[0];
for (int i = 1; i <= v[0]; ++ i)
for (int j = 1; j <= b.v[0]; ++ j)
ans.v[i + j - 1] += v[i] * b.v[j];
int tr = 0;
for (int i = 1; i <= ans.v[0]; ++ i) {
ans.v[i] += tr;
tr = ans.v[i] / base;
ans.v[i] %= base;
}
while (ans.v[0] > 1 && !ans.v[ans.v[0]])
-- ans.v[0];
return ans;
}
};
istream& operator>>(istream &f, big_int &b) {
char str[2005];
f.get(str + 1, 2005);
int n = strlen(str + 1);
reverse(str + 1, str + n + 1);
for (int i = 1; i <= n; i += 4) {
++ b.v[0];
for (int j = min(n, i + 3); j >= i; -- j)
b.v[b.v[0]] *= 10, b.v[b.v[0]] += str[j] - '0';
}
return f;
}
ostream& operator<<(ostream &g, const big_int &b) {
for (int i = b.v[0]; i; -- i) {
if (i != b.v[0]) {
if (b.v[i] / 10 == 0)
g << '0';
if (b.v[i] / 100 == 0)
g << '0';
if (b.v[i] / 1000 == 0)
g << '0';
}
g << b.v[i];
}
return g;
}
int main()
{
ifstream cin("sarpe.in");
ofstream cout("sarpe.out");
big_int n;
cin >> n;
if (n.v[0] == 1 && n.v[1] == 1)
cout << "2\n";
else {
big_int ans = (n * n - n + 2) * 2;
cout << ans << '\n';
}
cin.close();
cout.close();
return 0;
}