Pagini recente » Cod sursa (job #2047431) | Cod sursa (job #2099136) | Cod sursa (job #1352495) | Cod sursa (job #1177071) | Cod sursa (job #2022369)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream si("sarpe.in");
ofstream so("sarpe.out");
int n[1<<14],np[1<<20];
char aux[1<<10];
void inm(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]]);
}
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]])
--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()
{
si.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);
if(n[0]==1&&n[1]==1)
{
so<<2;
return 0;
}
sq();
dif();
add(2);
inm(2);
for(int i=np[0];i;--i)
so<<np[i];
return 0;
}