taishaonohongchayhuhu
unknown
c_cpp
a year ago
2.5 kB
6
Indexable
#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; }
Editor is loading...
Leave a Comment