#include<iostream>
using namespace std;
void citire(int a[1000], int &n)
{
char cif;
int i;
cin>>n;
for(i=n;i>=1;i--)
{ cin>>cif;
a[i]=cif-48;//transform sin cifra in numar (cifa este caracter)
}
}
void aduna(int a[1000], int n, int b[1000], int m, int s[2000], int &p)//s=a+b
{ int i,t,c;
if(n<m)
{ p=m;//nr max de cifre
for(i=n+1;i<=m;i++) a[i]=0;//completez cu 0
}
else { p=n;//nr max de cifre
for(i=m+1;i<=n;i++) b[i]=0;//completez cu 0
}
t=0;
for(i=1;i<=p;i++)
{
c=a[i]+b[i]+t; //adun cifra cu cifra
s[i]=c%10;//restul se pune
t=c/10;//catul e transport
}
if(t==1)// a ramas transport
{
p++;//avem cu o cifra mai mult
s[p]=t;
}
}
void prod(int a[1000], int n, int cif, int s[1000], int &p)//s=a*cif inmultirea cu o cifra
{ int i,t,c;
p=n;
t=0;
for(i=1;i<=p;i++)
{
c=a[i]*cif+t;//inmultesc cifra cu cifra
s[i]=c%10;//restul
t=c/10;//transportul
}
if(t>0)// a ramas trasnport
{
p++;
s[p]=t;
}
}
void prod10(int a[1000], int n, int s[2000], int &p, int x) //inmulteste pe s cu 10 la x
{
int y,j;
for(j=1;j<=n;j++) s[j]=a[j];
p=n;
for(y=1;y<=x;y++) //deplasez spre stanga cu x pazitii si completez cu 0
{
p++;
for(j=p;j>=1;j--) s[j]=s[j-1];//deplasase
}
for(j=1;j<=x;j++) s[j]=0;//completare cu 0
}
int main()
{
int n,m,a[1000],b[1000],s[2000],ss[2000],ps,p,i,pp[2000],k,x,y,j;
k=0;
x=0;
citire(a,n);
citire(b,m);
for(i=1;i<=m;i++) //pentru fiecare cifra a lui b
{
prod(a,n,b[i],s,p);//inmultesc a cu cifra din b
prod10(s,p,ss,ps,x);//inmulteste pe s cu 10 la x
x++;//tine minte cu cate pozitii am de mutat
aduna(ss,ps,pp,k,pp,k);//adun la pp pe s pp este suma , iar s este produsul cu o cifra mutat cu cat trebuie
}
for(i=k;i>=1;i--) cout<<pp[i];
return 0;
}
|