fbpx

Operatii / Lucrul cu numere mari in C++

0

Ce sunt numerele mari?

De ce este necesar sa lucram cu numere mari? Numerele mari sunt numere ce nu pot fi stocate in tipurile de date cunoscute de noi pana acum (int, long long, etc). Daca avem o problema in care ni se cere sa adunam doua numere mari (de 500 de cifre, de exemplu), trebuie sa implementam noi operatiile generale (adunare, scadere, inmultire si impartire).

Ce solutie vom implementa?

Vom reprezenta un numar mare ca un vector in care retinem in ordine cifrele sale, incepand cu unitatile. De exemplu, numarul 123456 va fi retinut in vector astfel:

Deoarece pentru fiecare numar am avea nevoie de o variabila auxiliara care sa memoreze numarul total de cifre, apelam la un truc: memoram numarul total de cifre pe pozitia 0.

Definirea unui numar mare

Definim un numar mare ca fiind un vector de 501 elemente. Primul element ( NrMare[0] ) – va reprezenta numarul total de cifre ale numarului, in timp ce restul de 500 elemente vor fi cifrele efective ale numarului nostru.

Citirea si afisarea unui numar mare

Compararea a doua numere mari

Mai intai verificam daca cele doua numere sunt memorate corect: sa nu aiba zero-uri nesemnificative. De exemplu, verificam ca numarul „13” sa nu fie memorat drept „3100” (doua zerouri nesemnificative).

Dupa care parcurgem cifrele in ordinea inversa, iar atunci cand gasim o diferenta, returnam numarul mai mare.

Suma a doua numere mari

Pentru a calcula suma a doua numere mari, trebuie mai intai sa ne asiguram ca amandoua au acelasi numar de cifre. De exemplu, daca vrem sa adunam numerele 124 si 96, cele doua vor arata in memorie astfel:

Daca numarul nostru y era mai mic, evident, adaugam mai multe 0-uri nesemnificative. Dupa aceasta vom parcurge simultan cele doua numere,incepand de la unitati. Vom aduna cele doua cifre de pe pozitii corespondente si vom lua in calcul si eventuala cifra in plus care s-a obtinut de la adunarea precedenta. Retinem in suma cifra obtinuta prin adunare si recalculam cifra in plus.

Suma ar putea avea o cifra in plus fata de cel mai mare dintre cele doua numere (daca la sfarsit cifra in plus este nenula). Functia suma() va avea ca parametri cele doua numere mari care se aduna si numarul mare rezultat.

Diferenta a doua numere mari

Vom presupune ca descazutul este mai mare sau egal cu scazatorul.Pentru a calcula diferenta a doua numere mari vom parcurge dezcazutul incepand de la unitati. Vom scadea din cifra curenta a descazutului cifra curenta a scazatorului si vom lua in calcul si eventuala cifra de transport, obtinuta la scaderea precedenta. Daca rezultatul este negativ, imprumutam 10 de pe pozitia urmatoare (este posibil doar daca descazutul este mai mare ca scazatorul), si in acest caz cifra de transport devine -1.

Diferenta ar putea avea mai putine cifre decat descazutul, astfel incat la sfarsit calculam numarul de cifre din diferenta, ignorand zerourile nesemnificative.

 

Comentarii
Se incarca comentariile...

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More