Pagini recente » Cod sursa (job #319957) | Cod sursa (job #1484314) | Cod sursa (job #1041076) | Cod sursa (job #2255772) | Cod sursa (job #3216718)
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream fin ("sarpe.in");
ofstream fout ("sarpe.out");
char s[2005];
int i,a[2005],b[2005],v[2005],c[2005],d[2005],e[2005],f[2005];
void copiere (int a[],int b[])
{
for (int i=1; i<=a[0]; i++)
a[i]=0;
a[0]=0;
for (i=0; i<=b[0]; i++)
a[i]=b[i];
}
void produs_mic (int a[],int y)
{
int i=0,t=0;
for (i=1; i<=a[0]; i++)
{
long long k=1ll*a[i]*y+t;
a[i]=k%10;
t=k/10;
}
while (t!=0)
{
a[0]++;
a[a[0]]=t%10;
t=t/10;
}
}
void produs_mare (int c[],int a[],int b[])
{
int t=0;
c[0]=a[0]+b[0]-1;
for (int i=1; i<=a[0]; i++)
{
for (int j=1; j<=b[0]; j++)
c[i+j-1]+=a[i]*b[j];
}
for (i=1; i<=c[0]; i++)
{
c[i]=c[i]+t;
t=c[i]/10;
c[i]=c[i]%10;
}
if (t!=0)
c[++c[0]]=t;
}
void scadere (int a[],int val)
{
int t=0,i=0;
for (i=1; t>0||val>0; i++)
{
if (a[i]<val+t)
{
a[i]=10+a[i]-val-t;
t=1;
}
else
{
a[i]=a[i]-val-t;
t=0;
}
val=0;
}
while (a[0]>1&&a[a[0]]==0)
a[0]--;
}
void adunare (int c[],int a[],int b[])
{
int t=0,i=0;
for (i=1; i<=a[0]||i<=b[0]; i++)
{
c[i]=a[i]+b[i]+t;
t=c[i]/10;
c[i]=c[i]%10;
}
c[0]=i-1;
if (t>0)
{
c[0]=i;
c[i]=t;
}
}
int main()
{
///4*n+(n-2)*(n-1)*2
fin>>s;
v[0]=strlen (s);
reverse (s,s+v[0]);
for (i=1; i<=v[0]; i++)
v[i]=s[i-1]-'0';
copiere (a,v);
copiere (b,v);
copiere (c,v);
produs_mic (a,4);
scadere (b,2);
scadere (c,1);
produs_mare (e,b,c);
produs_mic (e,2);
adunare (d,a,e);
for (i=d[0]; i>0; i--)
fout<<d[i];
return 0;
}