Pagini recente » Cod sursa (job #1689344) | Cod sursa (job #864214) | Cod sursa (job #967820) | Cod sursa (job #535004) | Cod sursa (job #421061)
Cod sursa(job #421061)
#include<stdio.h>
#include<string.h>
const char in[]="sarpe.in", out[]="sarpe.out";
const long long N = 1<<10;
typedef int huge[N];
huge rez, n, a, b;
char s[N];
void mult(huge & H, unsigned long X)
{int i, T=0;
for ( i = 1 ; i <= H[ 0 ] ; i++ )
{ H[ i ] = H[ i ] * X + T ;
T = H[ i ] / 10 ;
H[ i ]=H[ i ] % 10 ;
}
while (T)
{ H[ ++H[ 0 ] ] = T % 10;
T /= 10;
}
}
void scad(huge & A, huge B)
{
int i, t = 0;
for (i = 1; i <= A[0]; i++)
A[i] += (t = (A[i] -= ((i <= B[0]) ? B[i] : 0) + t) < 0) * 10;
for (; A[0] > 1 && !A[A[0]]; A[0]--);
}
void multi(huge a, huge b, huge& c)
{ int i,j,T=0;
c[ 0 ] = a[ 0 ] + b[ 0 ] - 1;
for (i=1;i<=a[0]+b[0];) c[i++]=0;
for (i=1;i<=a[0];i++)
for (j=1;j<=b[0];j++)
c[i+j-1]+=a[i]*b[j];
for (i=1;i<=c[0];i++)
{ T=(c[i]+=T)/10;
c[i]%=10;
}
if (T) c[++c[0]]=T;
}
void sum(huge &a, huge b)
{ int i,T=0;
if (b[0]>a[0])
{ for (i=a[0]+1;i<=b[0];) a[i++]=0;
a[0]=b[0];
}
else for (i=b[0]+1;i<=a[0];) b[i++]=0;
for (i=1;i<=a[0];i++)
{ a[i]+=b[i]+T;
T=a[i]/10;
a[i]%=10;
}
if (T) a[++a[0]]=T;
}
int main()
{
freopen(in,"r",stdin);
freopen(out,"w",stdout);
fgets(s, N, stdin);
int i, t=0;
for(i = strlen(s) ; i >= 0 ; --i)
if(s[ i ] >= '0' && s[ i ] <= '9')n[++n[0]] = s[ i ] - '0';
if(n[1] == n[0] == 1){printf("0\n");return 0;}
for(i = 0 ; i <= n[ 0 ] ; ++i)rez[i] = a[i] = b[i] = n[i];
mult(rez, 4);
n[0] = n[ 1 ] = 1;
scad(b, n);
n[ 0 ] = 1;
n[ 1 ] = 2;
scad(a, n);
multi(a, b, n);
mult(n, 2);
sum(rez, n);
for(int i = rez[0] ; i >= 1 ; --i)
printf("%d",rez[i]);
return 0;
}