Polynomial.h
#pragma once #include<iostream> using namespace std; class Term { friend class Polynomial; public: int a; int x; Term* next; }; class Polynomial { Term* first; public: Polynomial() { first = new Term(); first->x = NULL; first->a = NULL; first->next = nullptr; } void insert(int x, int a) { Term* p; p = first; Term* s; while (p->next != nullptr) { p = p->next; } s = new Term(); s->a = a; s->x = x; s->next = p->next; p->next = s; } int maxE() { Term* p; int max = -999999; p = first->next; while (p != nullptr) { if (p->x > max) { max = p->x; } p = p->next; } return max; } Term* getFirst() { return first; } friend Polynomial operator + (Polynomial& A, Polynomial& B) { Polynomial C; Term* pa, * pb, * pc; pa = A.first->next; pb = B.first->next; pc = C.first->next; while (pa != nullptr && pb != nullptr) { if (pa->x > pb->x) { C.insert(pb->x, pb->a); pb = pb->next; } else if (pa->x == pb->x) { if (pa->a + pb->a != 0) { C.insert(pa->x, pa->a + pb->a); } pa = pa->next; pb = pb->next; } else if (pa->x < pb->x) { C.insert(pa->x, pa->a); pa = pa->next; } } if (pa == nullptr) { while (pb != nullptr) { C.insert(pb->x, pb->a); pb = pb->next; } } else if (pb == nullptr) { while (pa != nullptr) { C.insert(pa->x, pa->a); pa = pa->next; } } return C; } friend Polynomial operator * (Polynomial& A, Polynomial& B) { int* arr; Term* pa, * pb, * pc; int index, elem; Polynomial C; pc = C.first; int max = A.maxE() + B.maxE(); arr = new int[max + 1]; for (int i = 0; i < max + 1; i++) { arr[i] = 0; } pa = A.first->next; while (pa != nullptr) { pb = B.first->next; while (pb != nullptr) { index = pa->x + pb->x; elem = pa->a * pb->a; arr[index] += elem; pb = pb->next; } pa = pa->next; } for (int i = 0; i < max + 1; i++) { if (arr[i] != 0) { C.insert(i, arr[i]); } } return C; } friend ostream& operator<<(ostream& out, Polynomial& po) { Term* p; int num=0; p = po.getFirst(); p = p->next; while (p != nullptr) { if (p->a >= 0&&num!=0) { out << "+"; } out << p->a; if (p->x > 0) { out << "x^"; if (p->x > 1) { out<<p->x; } } p = p->next; num++; } out << endl; return out; } friend istream& operator>>(istream& in, Polynomial& po) { int a=-1, x=-1; while (1) { in >> a>> x; if (x >= 0) { po.insert(x, a); } if (x < 0) { break; } } return in; } };
main.cpp
#include"Polynomial.h" int main() { Polynomial A, B, C, D; cout << "Please inputa A:" << endl; cin >> A; cout << "A:" << endl; cout << A << endl; cout << "Please inputa B:" << endl; cin >> B; cout << "B:" << endl; cout << B << endl; C = A + B; cout << "A+B:" << endl; cout << C << endl; D = A * B; cout << "A*B:" << endl; cout << D << endl; return 0; }
来源:https://www.cnblogs.com/SlowIsFast/p/12490977.html