Pagini recente » Cod sursa (job #2309046) | Cod sursa (job #2552015) | Cod sursa (job #2577509) | Cod sursa (job #99739) | Cod sursa (job #3275228)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("sarpe.in");
ofstream cout("sarpe.out");
int v[2005],vc[2005],ccnt=0,v4[2005],cnt4=0,v1[2005],v2[2005],r[2005],cnt=0,cntr=0,cnt1=0;
void produs1(int a,int vr[])
{
int t=0;
for(int i=0;i<cnt;i++)
{
t=t+vr[i]*a;
vr[i]=t%10;
t/=10;
}
while(t)
{
vr[cnt++]=t%10;
t/=10;
}
}
scadere()
{
v[0]--;
for(int i=0;i<cnt;i++)
{
if(v[i]<0)
{
v[i]+=10;
v[i+1]--;
}
else
break;
}
if(v[cnt-1]==0)
cnt--;
}
cop(int vr[],int vi[])
{
for(int i=0;i<cnt;i++)
vr[i]=vi[i];
}
void inm()//v1*v2 ->r
{
for(int i=0;i<cnt1;i++)
for(int j=0;j<cnt;j++)
r[i+j]+=v1[i]*v2[j];
int t=0;
for(int i=0;i<cnt+cnt1-1;i++)
{
t=t+r[i];
r[i]=t%10;
t/=10;
}
cntr=cnt+cnt1-1;
if(t)r[cntr++]=t;
}
void adun()
{
int t=0;
for(int i=0;i<cntr;i++)
{
t=t+r[i]+v4[i];
r[i]=t%10;
t/=10;
}
while(t)
{
r[cntr++]=t%10;
t/=10;
}
}
int main()
{
char c;
while(cin>>c)
v[cnt++]=c-'0';
reverse(v,v+cnt);
if(cnt==1 && v[0]==1)
{
cout<<1;
return 0;
}
else if(cnt==1 && v[0]==2)
{
cout<<8;
return 0;
}
cop(vc,v);
ccnt=cnt;
produs1(4,v);
cop(v4,v);
cnt4=cnt;
cnt=ccnt;
cop(v,vc);
scadere();
cop(v1,v);
cnt1=cnt;
scadere();
cop(v2,v);///cnt
inm();///r=(n-1)*(n-2)
cnt=cntr;
produs1(2,r);
cntr=cnt;
adun();
for(int i=cntr-1;i>=0;i--)cout<<r[i];
return 0;
}
/**
v1-cnt1
v2-cnt
adunam r cu v4;
*/