Impartirea numerelor mari

Impartirea a doua numere mari

Dacă cele două numere mari sunt compatibile ca dimensiune, putem simula împărțirea prin scăderi repetate. În caz contrar, această metodă este ineficientă. Vom simula algoritmul de împărțire învățat la matematică.

Funcția imparte() are următorii 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

    • catul impartirii a:b: cif: char cat[]; //transmis prin referință, fiind o constantă pointer la primul caracter din șir

    • numărul de cifre din al câtului lgcat: int &lgcat; //transmis prin referință, se modifică în funcție

    • restul impartirii a:b: cif: char rest[]; //transmis prin referință, fiind o constantă pointer la primul caracter din șir

    • numarul de cifre a restului obțiut în urma operatiei a:b:cif: int &rest; //transmis prin referință, se modifică în funcție

//copie element cu element vectorul a in b si actualizeaza lgb

void copie(char a[],int lga, char b[], int &lgb)

{

int i;

for(i=0;i<lga;i++)

b[i]=a[i];

lgb=lga;

}

//impartirea a doua numere mari

void imparte(char a[], int lga, char b[], int lgb, char cat[], int &lgcat, char rest[], int &lgrest)

{

int i, lgaux;

char aux[DIM_MAX];

//intializez lungimile

lgcat=lga;

lgrest=0;

//simulare impartire numere mari a:b

for(i=lga-1;i>=0;--i)

{

inmultirePutere10(rest,lgrest,1,aux,lgaux);

copie(aux, lgaux,rest,lgrest);

rest[0]=a[i];

cat[i]=0;

//daca obtin un rest mai mare decat impartitorul incep sa

//scad din rest impartitorul de cate ori pot

while(compara(b,lgb,rest,lgrest)!=1)

{

cat[i]++;

scadere(rest,lgrest,b,lgb,rest,lgrest);

}

}

//determin numarul de cifre ale catului si ale restului

while(!cat[lgcat-1]&&lgcat>1)

lgcat--;

while(!rest[lgrest-1]&&lgrest>1)

lgrest--;

}

Observație: s-a folosit functia copie(char a[],int lga, char b[], int &lgb)care copie element cu element vectorul a în vectorul b si actualizează numărul de cifre din vectorul b.