Pagini recente » Cod sursa (job #1317101) | Cod sursa (job #1282219) | Cod sursa (job #2473280) | Cod sursa (job #2105588) | Cod sursa (job #1742525)
#include <fstream>
#include <vector>
#include <map>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
ifstream cin("sarpe.in");
ofstream cout("sarpe.out");
const int MAXN = 4000;
char s[1 + MAXN];
int v[1 + MAXN], v0[1 + MAXN];
void Square(int a[]) {
for (int i = 1; i <= a[0]; i++) {
int j, c;
for (c = 0, j = 1; j <= a[0] || c; j++, c /= 10)
v0[i + j - 1] = (c += v0[i + j - 1] + a[i] * a[j]) % 10;
if (i + j - 2 > v0[0])
v0[0] = i + j - 2;
}
}
void Subtract(int a[], int b[]) {
for (int c = 0, i = 1; i <= a[0]; i++)
a[i] += (c = (a[i] -= b[i] + c) < 0) * 10;
while (a[0] > 1 && a[a[0]] == 0)
a[0]--;
}
void Add(int a[], int k) {
int i, c = 0;
a[1] += k;
c = a[1] / 10;
a[1] %= 10;
for (i = 2; i <= a[0] || c; i++, c /= 10)
a[i] = (c += a[i]) % 10;
a[0] = i - 1;
}
void Multiply(int a[], int k) {
int i, c = 0;
for (i = 1; i <= a[0] || c; i++, c /= 10)
a[i] = (c += a[i] * k) % 10;
a[0] = i - 1;
}
int main() {
cin >> s;
int n = strlen(s);
for (int i = n - 1; i >= 0; i--) {
v[0]++;
v[v[0]] = s[i] - '0';
}
if (v[0] == 1 && v[1] == 1) {
cout << "2\n";
return 0;
}
else {
Square(v);
Subtract(v0, v);
Add(v0, 2);
Multiply(v0, 2);
for (int i = v0[0]; i > 0; i--)
cout << v0[i];
cout << "\n";
}
return 0;
}