Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- struct Nod {
- int val;
- Nod *next = NULL;
- };
- struct Lista {
- Nod *prim = NULL, *ult = NULL, *p = NULL;
- /// int lg = 0;
- void AdaugareInceput(int x) {
- /// if(lg == 0) {
- if(prim == NULL) {
- prim = new Nod;
- prim->val = x;
- prim->next = NULL;
- ult = prim;
- }
- else {
- p = new Nod;
- p->val = x;
- p->next = prim;
- prim = p;
- }
- /// lg++;
- }
- void AdaugareSfarsit(int x) {
- /// if(lg == 0) {
- if(ult == NULL) {
- ult = new Nod;
- ult->val = x;
- ult->next = NULL;
- prim = ult;
- }
- else {
- p = new Nod;
- p->val = x;
- p->next = NULL;
- ult->next = p;
- ult = p;
- }
- /// lg++;
- }
- void Afisare() {
- cout << "\n";
- p = prim;
- while(p != NULL) {
- cout << p->val << " ";
- p = p->next;
- }
- cout << "\n";
- }
- int CautareDupaValoare(int v) {
- int poz = 1;
- p = prim;
- while(p != NULL) {
- if(p->val == v) return poz;
- p = p->next;
- poz++;
- }
- return -1;
- }
- int CautareDupaPozitie(int poz) {
- if(poz < 1) return -1;
- int poz2 = 1;
- p = prim;
- while(p != NULL) {
- if(poz == poz2) return p->val;
- p = p->next;
- poz2++;
- }
- return -1;
- }
- void AdaugareDupaValoare(int v, int x) {
- p = prim;
- while(p != NULL) {
- if(p->val == v) {
- Nod *aux = new Nod;
- aux->val = x;
- aux->next = p->next;
- p->next = aux;
- if(p == ult) ult = aux;
- return;
- }
- p = p->next;
- }
- }
- void AdaugareDupaPozitie(int poz, int x) {
- if(poz < 1) return;
- int poz2 = 1;
- p = prim;
- while(p != NULL) {
- if(poz == poz2) {
- Nod *aux = new Nod;
- aux->val = x;
- aux->next = p->next;
- p->next = aux;
- if(p == ult) ult = aux;
- return;
- }
- p = p->next;
- poz2++;
- }
- }
- void StergereDupaValoare(int v) {
- Nod *prev;
- p = prev = prim;
- while(p != NULL) {
- if(p->val == v) {
- if(p == prim && p == ult) {
- prim = ult = p->next; /// NULL
- delete p;
- return;
- }
- if(p == prim) {
- prim = p->next;
- delete p;
- return;
- }
- if(p == ult) {
- ult = prev;
- delete p;
- return;
- }
- prev->next = p->next;
- delete p;
- }
- prev = p;
- p = p->next;
- }
- }
- void StergereDupaPozitie(int poz) {
- if(poz < 1) return;
- Nod *prev;
- int poz2 = 1;
- p = prev = prim;
- while(p != NULL) {
- if(poz == poz2) {
- if(p == prim && p == ult) {
- prim = ult = p->next; /// NULL
- delete p;
- return;
- }
- if(p == prim) {
- prim = p->next;
- delete p;
- return;
- }
- if(p == ult) {
- ult = prev;
- ult->next = NULL;
- delete p;
- return;
- }
- prev->next = p->next;
- delete p;
- }
- poz2++;
- prev = p;
- p = p->next;
- }
- }
- };
- /// 1
- void InserareMedii() {
- Lista L;
- int n, x;
- cout << "n = "; cin >> n;
- for(int i = 1; i <= n; i++) {
- cin >> x;
- L.AdaugareSfarsit(x);
- }
- L.Afisare();
- int med, poz = 1;
- Nod *p = L.prim;
- while(p->next != NULL) {
- med = (p->val + p->next->val) / 2;
- L.AdaugareDupaPozitie(poz, med);
- p = p->next->next;
- poz += 2;
- }
- L.Afisare();
- }
- /// 2
- void InserareSortata() {
- Lista L;
- int n, x, poz;
- Nod *p;
- cout << "n = "; cin >> n;
- for(int i = 1; i <= n; i++) {
- cin >> x;
- if((L.prim == NULL) || (x <= L.prim->val)) L.AdaugareInceput(x);
- else {
- p = L.prim;
- poz = 1;
- while(p != NULL && p->val < x) {
- p = p->next;
- poz++;
- }
- if(p == NULL) L.AdaugareSfarsit(x);
- else L.AdaugareDupaPozitie(poz - 1, x);
- }
- L.Afisare();
- }
- }
- /// 3
- Nod *Inv(Nod *p) {
- if(p->next == NULL) return p;
- else {
- Nod *n = Inv(p->next);
- n->next = p;
- p->next = NULL;
- }
- }
- void InversareLista() {
- Lista L;
- int n, x;
- cout << "n = "; cin >> n;
- for(int i = 1; i <= n; i++) {
- cin >> x;
- L.AdaugareSfarsit(x);
- }
- L.Afisare();
- Inv(L.prim);
- swap(L.prim, L.ult);
- L.Afisare();
- }
- /// 4
- void InterclasareListe() {
- Lista A, B;
- int n, m, x;
- cout << "n = "; cin >> n;
- for(int i = 1; i <= n; i++) {
- cin >> x;
- A.AdaugareSfarsit(x);
- }
- A.Afisare();
- cout << "m = "; cin >> m;
- for(int i = 1; i <= m; i++) {
- cin >> x;
- B.AdaugareSfarsit(x);
- }
- B.Afisare();
- Nod *pA, *pB, *pAux;
- pA = A.prim;
- pB = B.prim;
- while(pA != NULL && pB != NULL) {
- if(pA->val <= pB->val) {
- pAux = pA->next;
- pA->next = pB;
- pA = pAux;
- }
- else {
- pAux = pB->next;
- pB->next = pA;
- pB = pAux;
- }
- //A.Afisare();
- //B.Afisare();
- }
- if(A.prim->val < B.prim->val) A.Afisare();
- else B.Afisare();
- }
- /// 5
- void SumaNumereMari() {
- Lista A, B, C;
- char nr[100];
- cout << "A = "; cin >> nr;
- for(int i = 0; i < strlen(nr); i++)
- A.AdaugareInceput(nr[i] - '0');
- cout << "B = "; cin >> nr;
- for(int i = 0; i < strlen(nr); i++)
- B.AdaugareInceput(nr[i] - '0');
- int mem = 0, s;
- Nod *pA = A.prim, *pB = B.prim;
- while(pA != NULL && pB != NULL) {
- s = pA->val + pB->val + mem;
- C.AdaugareInceput(s % 10);
- mem = s / 10;
- pA = pA->next;
- pB = pB->next;
- }
- while(pA != NULL) {
- s = pA->val + mem;
- C.AdaugareInceput(s % 10);
- mem = s / 10;
- pA = pA->next;
- }
- while(pB != NULL) {
- s = pB->val + mem;
- C.AdaugareInceput(s % 10);
- mem = s / 10;
- pB = pB->next;
- }
- C.Afisare();
- }
- /// 6
- void ProdusNumereMari() {
- Lista A;
- int B;
- char nr[100];
- cout << "A = "; cin >> nr;
- for(int i = 0; i < strlen(nr); i++)
- A.AdaugareInceput(nr[i] - '0');
- cout << "B = "; cin >> B;
- int mem = 0, s;
- Nod *pA = A.prim;
- while(pA != NULL) {
- s = pA->val * B + mem;
- pA->val = s % 10;
- mem = s / 10;
- pA = pA->next;
- }
- while(mem) {
- A.AdaugareSfarsit(mem % 10);
- mem /= 10;
- }
- A.Afisare();
- }
- /// 7
- void ProdusNumereMari2() {
- Lista A, B, C;
- char nr[100];
- int c_len = 0;
- Nod *pA, *pB, *pC;
- Nod *poz;
- cout << "A = "; cin >> nr;
- for(int i = 0; i < strlen(nr); i++)
- A.AdaugareInceput(nr[i] - '0');
- c_len = strlen(nr);
- cout << "B = "; cin >> nr;
- for(int i = 0; i < strlen(nr); i++)
- B.AdaugareInceput(nr[i] - '0');
- c_len *= strlen(nr);
- for(int i = 1; i <= c_len; i++)
- C.AdaugareInceput(0);
- int mem;
- pB = B.prim;
- pC = C.prim;
- while(pB != NULL) {
- mem = 0;
- pA = A.prim;
- poz = pC;
- while(pA != NULL) {
- poz->val += ((pA->val * pB->val) + mem) % 10;
- mem = ((pA->val * pB->val) + mem) / 10;
- pA = pA->next;
- poz = poz->next;
- }
- pB = pB->next;
- pC = pC->next;
- C.Afisare();
- }
- }
- int main() {
- /*
- InserareMedii();
- InserareSortata();
- InversareLista();
- InterclasareListe();
- SumaNumereMari();
- ProdusNumereMari();
- */
- ProdusNumereMari2();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement