Pagini recente » Cod sursa (job #2358084) | Cod sursa (job #1698648) | Cod sursa (job #2095416) | Cod sursa (job #744883) | Cod sursa (job #588788)
Cod sursa(job #588788)
#include <fstream>
#include <algorithm>
using namespace std;
int N[10005], Np[1000005];
char aux[1005];
void Inm1(int x)
{
for (int i = 1; i <= N[0]; ++i)
N[i] *= x;
for (int i = 1; i <= N[0]; ++i)
if (N[i] >= 10)
{
N[i + 1] += N[i] / 10;
N[i] %= 10;
N[0] = max(N[0], i + 1);
}
}
void Inm2(int x)
{
for (int i = 1; i <= Np[0]; ++i)
Np[i] *= x;
for (int i = 1; i <= Np[0]; ++i)
if (Np[i] >= 10)
{
Np[i + 1] += Np[i] / 10;
Np[i] %= 10;
Np[0] = max(Np[0], i + 1);
}
}
void Sq()
{
for (int i = 1; i <= N[0]; ++i)
for (int j = 1; j <= N[0]; ++j)
{
Np[i + j - 1] += N[i] * N[j];
if (Np[i + j - 1] >= 10)
{
Np[i + j] += Np[i + j - 1] / 10;
Np[i + j - 1] %= 10;
}
}
Np[0] = 2 * N[0] - (Np[2 * N[0]] == 0);
}
void Dif()
{
int T = 0;
for (int i = 1; i <= Np[0]; ++i)
{
Np[i] -= N[i] + T;
if (Np[i] < 0) Np[i] += 10, T = 1;
else T = 0;
}
while (Np[0] > 1 && Np[Np[0]] == 0) --Np[0];
}
void Add(int x)
{
Np[1] += x;
for (int i = 1; Np[i] >= 10; ++i)
{
Np[i + 1] += Np[i] / 10;
Np[i] %= 10;
Np[0] = max(Np[0], i + 1);
}
}
int main()
{
ifstream fin("sarpe.in");
ofstream fout("sarpe.out");
fin.getline(aux, 1005);
for (int i = 0; aux[i] != '\0'; ++i, ++N[0])
N[i + 1] = aux[i] - '0';
reverse(N + 1, N + N[0]+ 1);
Sq();
Add(4);
Inm1(3);
Dif();
Inm2(4);
for (int i = Np[0]; i >= 1; --i)
fout << Np[i];
fin.close();
fout.close();
}