taishaonohongchayhuhu

mail@pastecode.io avatar
unknown
c_cpp
2 months ago
2.5 kB
3
Indexable
Never
#include <bits/stdc++.h>
using namespace std;

struct Donthuc {
    double hs; int sm;
};

struct DATHUC {
    int n;
    Donthuc* t;
};

DATHUC* Nhap () {
    DATHUC *f = new DATHUC;

    cin >> f -> n;

    f -> t = new Donthuc[f -> n];

    for (int i = 0; i < f -> n; i++) {
        cin >> f -> t[i].hs >> f -> t[i].sm;
    }

    return f;
}

void Xuatdonthuc (Donthuc a) {
    if (a.hs == 0) return;
    else if (a.hs == 1) {
        if (a.sm == 0) 
            cout << a.hs;
        else if (a.sm == 1) 
            cout << "x";
        else 
            cout << "x^" << a.sm;
    }
    else if (a.hs == -1) {
        if (a.sm == 0) 
            cout << a.hs;
        else if (a.sm == 1) 
            cout << "-x";
        else 
            cout << "-x^" << a.sm;
    }
    else {
        if (a.sm == 0) 
            cout << a.hs;
        else if (a.sm == 1) 
            cout << a.hs << "x";
        else 
            cout << a.hs << "x^" << a.sm;
    }
}

void Xuat (DATHUC f) {
    int flag = 0;

    for (int i = 0; i < f.n; i++) {
        if (f.t[i].hs > 0 && flag) cout << "+";
        if (f.t[i].hs != 0) flag = 1;
        Xuatdonthuc(f.t[i]); 
    }

}

DATHUC Tong2DaThuc (DATHUC* A, DATHUC* B) {
    DATHUC f;

    f.n = A -> n; //đếm số lượng đơn thức khác số mũ trong đa thức A và B
    for (int i = 0; i < B -> n; i++) {
        int flag = 1;

        for (int j = 0; j < A -> n; j++) {
            if (B -> t[i].hs == A -> t[j].hs)
                flag = 0;
        }

        if (flag) f.n++;
    }

    //cộng hai đa thức
    int cntA = 0, cntB = 0;

    for (int i = 0; i < f.n; i++) 
    {
        if (A -> t[cntA].hs > B -> t[cntB].sm) {
            f.t[i].hs = A -> t[cntA].hs;
            f.t[i].sm = A -> t[cntA].sm;

            cntA++;
        }
        else if (A -> t[cntA].hs < B -> t[cntB].sm) {
            f.t[i].hs = A -> t[cntB].hs;
            f.t[i].sm = A -> t[cntB].sm;

            cntB++;
        }
        else {
            f.t[i].hs = A -> t[i].hs + B -> t[i].hs;
            f.t[i].sm = A -> t[i].sm;

            cntA++; cntB++;
        }
    }

    return f;
}

int main() {
    DATHUC *A, *B;
    A = Nhap();
    B = Nhap();
    cout << "Da thuc A: "; Xuat(*A);
    cout << "\nDa thuc B: "; Xuat(*B);
    cout << "\nA+B = "; Xuat(Tong2DaThuc(A, B));
    return 0;
}
Leave a Comment