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