Pagini recente » Cod sursa (job #2696587) | Cod sursa (job #1656119) | Cod sursa (job #1817772) | Cod sursa (job #723692) | Cod sursa (job #1792326)
#include <fstream>
#include <cstring>
#define NMAX 3000
using namespace std;
int i, n, j, cnt;
char sir[NMAX];
ifstream f("sarpe.in");
ofstream g("sarpe.out");
struct huge
{
int nr;
int cifre[3000];
}nr, unu, aux, rez, doi, trei, patru, cinci, sase;
huge inmultirevc(huge a, huge b, huge c)
{
int i, j, T=0;
c.nr = a.nr + b.nr -1;
for(i=1;i<=a.nr;i++)
for(j=1;j<=b.nr;j++)
c.cifre[i+j-1] += a.cifre[i]*b.cifre[j];
for(i=1;i<=c.nr;i++)
{
c.cifre[i] += T;
T = c.cifre[i]/10;
c.cifre[i] = c.cifre[i]%10;
}
if(T)
c.cifre[++c.nr] = T;
return c;
}
huge scadere(huge a, huge b)
{
int i,T=0;
for(i=1;i<=a.nr;i++)
{
a.cifre[i]=a.cifre[i] - b.cifre[i] - T;
if(a.cifre[i]<0)
T=1;
else T=0;
if(T)
a.cifre[i]+=10;
}
while(!a.cifre[a.nr])
a.nr--;
return a;
}
huge adunare(huge a, huge b)
{
int i,T=0;
for(i=1;i<=a.nr;i++)
{
a.cifre[i] = a.cifre[i] + b.cifre[i] + T;
T = a.cifre[i]/10;
a.cifre[i] = a.cifre[i] % 10;
}
if(T)
a.cifre[++a.nr]=T;
return a;
}
int main()
{
f>>sir;
n = strlen(sir) - 1;
for(i=n;i>=0;i--)
nr.cifre[++cnt] = sir[i] - '0';
n++;
nr.nr = n;
if(n == 1 && nr.cifre[1] == 1)
g<<"2";
else if(n == 1 && nr.cifre[1] == 2)
g<<"8";
else
{
aux.nr = 1;
aux.cifre[1] = 4;
unu = inmultirevc(nr, aux, rez);
aux.cifre[1] = 2;
doi = scadere(nr, aux);
aux.cifre[1] =1;
trei = scadere(nr, aux);
patru = inmultirevc(doi, trei, rez);
aux.cifre[1] = 2;
cinci = inmultirevc(patru, aux, rez);
sase = adunare(cinci, unu);
for(i = sase.nr; i>=1; i--)
g<<sase.cifre[i];
}
}