Produsul numerelor mari
Produsul dintre doua numere mari
Inițial vom completa cu 0 toate elementele vectorului rezultat. Pentru a calcula produsul dintre două numere mari vom înmulți fiecare cifră a deînmulțitului(numărul memorat în vectrul a), pe rând, cu fiecare cifră a înmuțitorului(numărul memorat în vectorul b) și vom aduna fiecare produs parțial obținul la rezultatul final, care sunt memorate în vectorul rezultat, pe poziția corespunzătoare. Atunci când înmulțim cifra a[j] cu toate cifrele numărului b, produsul parțial obținut este înmulțit cu 10j, adică cifrele sunt deplasate cu j poziții la dreapta.
Funcția inmulteste() are șase parametri:
primul număr a: char a[]; //transmis prin referință, fiind o constantă pointer la primul caracter din șir
numărul de cifre din primul număr: int lga; //transmis prin valoare
al doilea număr b: char b[]; //transmis prin referință, fiind o constantă pointer la primul caracter din șir
numărul de cifre din cel de-al doilea număr: int lgb; //transmis prin valoare
numarul obțiut în urma înmulțirii a*b: char rez[]; //transmis prin referință, fiind o constantă pointer la primul caracter din șir,
numărul de cifre al rezultatului: int &lgrez; //transmis prin referință, el se va modifica în această funcție
//inmultiea a doua numere mari
void inmulteste(char a[], int lga, char b[], int lgb, char rez[],int &lgrez)
{ int i,j,t;
//initializa cifrele vectorului rezultat cu 0
for(i=0;i<DIM_MAX;++i)
rez[i]=0;
//incepem inmultirea
for(i=0;i<lga;++i)
{
//produs partial
t=0;
for(j=0;j<lgb;++j)
{
rez[i+j]=rez[i+j]+a[i]*b[j]+t;
t=rez[i+j]/10;
rez[i+j]=rez[i+j]%10;
}
//daca ramane transport la finalul unui prdus partial
//il punem pe pozitiile urmatoare
if(t)
rez[i+j]=t;
}
//stabilim lungimea rezultatului
lgrez=lga+lgb;
if(rez[lgrez]==0)
lgrez--;
}
Observație: rezultatul poate avea DIM_MAX+2 cifre, atenție la declararea vectorului rezultat