Pagini recente » Cod sursa (job #2112245) | Cod sursa (job #2570524) | Cod sursa (job #2909779) | Cod sursa (job #1978174) | Cod sursa (job #2323639)
#include <cstdio>
#include <iostream>
using namespace std;
int v[10000],x[10000],y[10000],aux[10000];
void add(int a[],int b[]){
int i,t=0;
for (i=a[0]+1;i<=b[0];i++)
a[i]=0;
for (i=b[0]+1;i<=a[0];i++)
b[i]=0;
a[0]=max(a[0],b[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]]=1;
}
void scad (int a[]){
int i=1;
while (a[i]==0){
a[i]=9;
i++;
}
a[i]--;
if (a[a[0]]==0 && a[0]>1)
a[0]--;
}
void inmult (int a[],int xx){
int i,t=0;
for (i=1;i<=a[0];i++){
a[i]=a[i]*xx+t;
t=a[i]/10;
a[i]%=10;
}
while (t){
a[++a[0]]=t%10;
t/=10;
}
}
void inmult_vect (int a[],int b[]){
int i,j,t=0;
aux[0]=a[0]+b[0]-1;
for (i=1;i<=a[0];i++){
for (j=1;j<=b[0];j++)
aux[i+j-1]+=a[i]*b[j];
}
for (i=1;i<=aux[0];i++){
aux[i]+=t;
t=aux[i]/10;
aux[i]%=10;
}
while (t){
aux[++aux[0]]=t%10;
t/=10;
}
}
int main()
{
FILE *fin=fopen ("sarpe.in","r");
FILE *fout=fopen ("sarpe.out","w");
int st,dr,i;
char c;
c=fgetc (fin);
while ('0'<=c && c<='9'){
v[++v[0]]=c-'0';
c=fgetc (fin);
}
st=1;
dr=v[0];
while (st<dr){
swap(v[st],v[dr]);
st++;
dr--;
}
if (v[0]==1 && v[1]==1)
fprintf (fout,"2");
else if (v[0]==1 && v[1]==2)
fprintf (fout,"8");
else {
for (i=0;i<=v[0];i++)
x[i]=v[i];
scad (x);
for (i=0;i<=x[0];i++)
y[i]=x[i];
scad (y);
inmult_vect (x,y);
inmult (aux,2);
inmult (v,4);
add(v,aux);
for (i=v[0];i;i--)
fprintf (fout,"%d",v[i]);
}
return 0;
}