Cod sursa(job #729195)
#include <fstream>
using namespace std;
ifstream F("sarpe.in");
ofstream G("sarpe.out");
#define Lmax 3022
int N[Lmax],Ln,Lr,Lr2,Lr3;
int Rez[Lmax],Rez2[Lmax];
int Rez3[Lmax];
char C[Lmax];
void Mul(int A[],int& La,int B[],int& Lb)
{
for (int j=1;j<=La;++j)
{
A[j]*=max(B[j],1);
if (A[j]>9)
{
A[j+1]+=A[j]/10;
A[j]%=10;
}
}
for (;A[La]>9;)
{
A[++La]=A[La-1]/10;
A[La-1]%=10;
}
}
void Smul(int A[],int &La,int B)
{
for (int j=1;j<=La;++j)
{
A[j]*=B;
if (A[j]>9)
{
A[j+1]+=A[j]/10;
A[j]%=10;
}
}
for (;A[La]>9;)
{
A[++La]=A[La-1]/10;
A[La-1]%=10;
}
}
void Del(int A[],int &La,int B)
{
bool oke=true;int i;
for (i=1;B>0;++i)
{
A[i]-=B%10;
B/=10;
oke=( A[i]<0 )? false : oke;
}
for (int j=i;j<i;++j)
A[j]+=10;
if (!oke)
{
--A[i];
while (A[i]==-1)
--A[++i];
while (A[La]==0)
--La;
}
}
void read()
{
F.getline(C,Lmax,'\n');
Ln=0;
for (int j=0;( int(C[j])-int('0')>=0 && int(C[j])-int('0')<=9 );++j)
N[++Ln]=int(C[j])-int('0');
for (int j=1;j<=Ln/2;++j)
swap(N[j],N[Ln-j+1]);
Lr=Lr2=Lr3=Ln;
for (int i=1;i<=Ln;++i)
Rez[i]=Rez2[i]=Rez3[i]=N[i];
}
void Adu(int A[], int B[],int &La,int &Lb)
{
int i, t = 0;
A[0]=La,B[0]=Lb;
for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
A[i] = (t += A[i] + B[i]) % 10;
A[0] = i - 1;
La=A[0];
}
void write()
{
for (int i=Lr;i>0;--i)
G<<Rez[i];
G<<'\n';
}
int main()
{
read();
Del(Rez2,Lr2,1);
Del(Rez3,Lr3,2);
if (Rez3[1]==0)
Rez2[1]=0;
else
Mul(Rez2,Lr2,Rez3,Lr3);
Smul(Rez2,Lr2,2);
Smul(Rez,Lr2,4);
Adu(Rez,Rez2,Lr,Lr2);
write();
F.close();
G.close();
return 0;
}