Diferenta numerelor mari

Diferența dintre doua numere mari

Pentru a putea realiza această operație vom considera numarul mare a (descăzutul) mai mare decat numărul mare b (scăzătorul) (a>b). Vom parcurge cifră cu cifră, începând de la cifra unităților-poziția 0-numărul a și vom scădea din ea cifra corespunzătoare din numărul b, luând în calcul si cifra de transport obțnută la scăderea anterioară(inițial cifra de transport este 0).

    • dacă rezultatul scăderii a[i]-b[i]+t este negativ atunci ”împrumutăm” 10 de pe poziția următoare(lucru posibil deoarece descăzutul este mai mare decât scăzătorul) și în această situație cifra de control devine -1;

    • dacă rezultatul scăderii a[i]-b[i]+t este pozitiv atunci nu avem nevoie de ”împrumut” și cifra de control devine 0.

Numărul obținut în urma scăderii ar putea avea mai puține cifre decât descăzutul, astfel încât la sfârșit verificăm dacă avem zerouri nesemnificative la începutul numărului și actualizăm numărul de cifre al rezultatului astfel încât prima cifră a vectorului diferență(cea cu cel mai mare indice) să fie diferită de zero.

Funcția scadere() va avea șase parametri astfel:

    • 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 scăderii a-b: char dif[]; //transmis prin referință, fiind o constantă pointer la primul caracter din șir,

    • numărul de cifre al rezultatului: int &lgd; //transmis prin referință, el se va modifica în această funcție

//diferenta dintre doua numere mari, consideram a>b

void scadere(char a[],int lga, char b[],int lgb, char dif[], int &lgd)

{

int i, t=0;

//initializam lungimea vectorului difereta cu lungimea lui a

lgd=lga;

//scadem numerele cifra cu cifra, daca rezultatul obtiut e negativ

//atunci t=-1, altfel t=0;

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

{

dif[i]=a[i]-b[i]+t;

if(dif[i]<0)

{

dif[i]=dif[i]+10;

t=-1;

}

else

t=0;

}

//verificam daca avem zerouri nesemnificative la inceputul numarului

i=lgd-1;

while(dif[i]==0)

i--;

//actualizam lungimea vectoruui diferenta

lgd=i+1;

}

Exemplu: cel mai defavorabil caz este adunarea a=10000 și b=999 atunci, suma va fi numărul a-b=9001

:

Apel:

scadere(a,lga,b,lgb,c,lgc);

cout<<"Diferenta este: "<<endl;

afisare(c,lgc);