Pagini recente » Cod sursa (job #2654803) | Cod sursa (job #1506655) | Cod sursa (job #2231024) | Cod sursa (job #804470) | Cod sursa (job #581554)
Cod sursa(job #581554)
#include<stdio.h>
#include<string.h>
#define NMAX 10005
char s[NMAX];
void adun(int a[],int b[])
{
int i,t=0;
for(i=1;i<=a[0] || i<=b[0] || t;i++)
{
if(i>a[0])
a[i]=0;
if(i>b[0])
b[i]=0;
a[i]+=b[i]+t;
t=a[i]/10;
a[i]%=10;
}
a[0]=i-1;
}
void inmul(int a[],int val)
{
int t=0,i;
for(i=1;i<=a[0] || t;i++)
{
if(i>a[0])
a[i]=0;
a[i]=a[i]*val+t;
t=a[i]/10;
a[i]%=10;
}
a[0]=i-1;
}
void scad(int a[],int b[],int c[])
{
int i,t=0;
for(i=1;i<=b[0] || i<=c[0] || t;i++)
{
if(i>b[0])
b[i]=0;
if(i>c[0])
c[i]=0;
a[i]=b[i]-c[i]-t;
if(a[i]<0)
{
a[i]+=10;
t=1;
}
else
t=0;
}
a[0]=i-1;
while(a[0] && !a[a[0]])
a[0]--;
}
void inmultesc(int a[],int b[],int c[])
{
int i,j,dec,aux[NMAX];
for(i=0;i<=c[0];i++)
aux[i]=c[i];
for(i=1;i<=b[0];i++)
{
inmul(c,b[i]);
dec=i-1;
for(j=c[0];j>=1;j--)
c[j+dec]=c[j];
for(j=dec;j>=1;j--)
c[j]=0;
c[0]+=dec;
adun(a,c);
for(j=0;j<=aux[0];j++)
c[j]=aux[j];
}
}
int main ()
{
int i,nr;
int v[NMAX],v2[NMAX];
int a[NMAX],b[NMAX],c[NMAX];
freopen("sarpe.in","r",stdin);
freopen("sarpe.out","w",stdout);
scanf("%s",s);
nr=strlen(s);
for(i=1;i<=nr;i++)
v[i]=s[nr-i]-'0';
v[0]=nr;
v2[0]=v2[1]=1;
scad(a,v,v2);
v2[1]=2;
scad(b,v,v2);
inmultesc(c,a,b);
inmul(v,4);
inmul(c,2);
adun(c,v);
for(i=c[0];i>=1;i--)
printf("%d",c[i]);
printf("\n");
return 0;
}