Cod sursa(job #588788)

Utilizator darrenRares Buhai darren Data 9 mai 2011 16:30:21
Problema Sarpe Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#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();
}