Pagini recente » Cod sursa (job #1028990) | Cod sursa (job #735030) | Cod sursa (job #876128) | Cod sursa (job #1467698) | Cod sursa (job #306319)
Cod sursa(job #306319)
#include <stdio.h>
#include <string.h>
#define DIM 10005
char n[DIM];
int aux1[DIM],aux2[DIM],rez[DIM];
int nr1[DIM],nr2[DIM];
void mul1 (int a[DIM],int b)
{
int i,t=0;
for (i=1; i<=a[0] || t; ++i, t /= 10)
a[i]=(t+=a[i]*b)%10;
a[0]=i-1;
}
void mul (int a[DIM],int b[DIM])
{
int i,j,t,c[DIM];
memset (c,0,sizeof(c));
for (i=1; i<=a[0]; ++i)
{
for (t=0, j=1; j<=b[0] || t; ++j, t/=10)
c[i+j-1]=(t+=c[i+j-1]+a[i]*b[j])%10;
if (i+j-2>c[0])
c[0]=i+j-2;
}
memcpy (a,c,sizeof (c));
}
void dif (int a[DIM],int b[DIM])
{
int i,t=0;
for (i=1; i<=a[0]; ++i)
a[i]+=(t=(a[i]-=b[i]+t)<0)*10;
for (; a[0]>1 && !a[a[0]]; --a[0]);
}
void add (int a[DIM],int b[DIM])
{
int i,t=0;
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;
}
void print ()
{
int i;
for (i=rez[0]; i; --i)
printf ("%d",rez[i]);
}
void memcpy (int a[DIM],char b[DIM])
{
int i;
for (i=rez[0]; i; --i)
a[i]=b[rez[0]-i]-'0';
}
int main ()
{
freopen ("sarpe.in","r",stdin);
freopen ("sarpe.out","w",stdout);
gets (n);
if (n[0]==1 && strlen (n)==1)
{
printf ("20");
return 0;
}
nr1[0]=nr1[1]=nr2[0]=1;
nr2[1]=2;
rez[0]=aux1[0]=aux2[0]=strlen (n);
memcpy (rez,n);
memcpy (aux1,n);
memcpy (aux2,n);
mul1 (rez,4);
dif (aux1,nr1);
dif (aux2,nr2);
mul (aux1,aux2);
mul1 (aux1,2);
add (rez,aux1);
print ();
return 0;
}