1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<vector> #include<ctime> #include<malloc.h> using namespace std;
class Number { public: int coefficient; int index; };
class Polynomial { public: vector<Number> container;
Polynomial(bool flag = false) { while (flag) { vector<Number>::iterator it; Number temp; cin >> temp.coefficient; if (temp.coefficient == 0)break; cin >> temp.index; for (it = container.begin(); it != container.end(); it++) if (it->index > temp.index) { it = container.insert(it, temp); break; } if (it == container.end())container.push_back(temp); } } Polynomial(Polynomial& pol) { container = pol.container; }
bool travelPrint() { string str; cout << "f(x) = "; for (vector<Number>::iterator it = container.begin(); it != container.end(); it++) { if (it != container.begin()) { if (it->coefficient > 0)cout << " +"; if (it->coefficient < 0)cout << " "; }
if (it->coefficient == 1); else if (it->coefficient == -1)cout << "-"; else cout << (*it).coefficient;
if (it->index == 0); else if (it->index == 1)cout << "x"; else cout << "x^" << (*it).index;
if (it->index == 0 && it->coefficient == 1)cout << "1"; } cout << endl << endl; return true; }
Polynomial operator+(Polynomial& pol_2) { Polynomial pol_1 = *this; vector<Number>::iterator it1, it2; for (it2 = pol_2.container.begin(); it2 != pol_2.container.end(); it2++) { for (it1 = pol_1.container.begin(); it1 != pol_1.container.end(); it1++) { if (it1->index > it2->index) { it1 = pol_1.container.insert(it1, *it2); break; } else if (it1->index == it2->index) { it1->coefficient += it2->coefficient; break; } } if (it1 == pol_1.container.end()) { pol_1.container.push_back(*it2); } } return pol_1; }
Polynomial operator-(Polynomial& another) { Polynomial pol_1 = *this; Polynomial pol_2 = another; vector<Number>::iterator it; for (it = pol_2.container.begin(); it != pol_2.container.end(); it++) it->coefficient = -it->coefficient; pol_1 = pol_1 + pol_2; return pol_1; }
Polynomial operator*(Polynomial& another) { Polynomial *polynomials[100], result; vector<Number>::iterator it1, it2; Number temp; int i = 0; for (it1 = container.begin(); it1 != container.end(); it1++) { polynomials[i] = new Polynomial(); for (it2 = another.container.begin(); it2 != another.container.end(); it2++) { temp.coefficient = it1->coefficient * it2->coefficient; temp.index = it1->index + it2->index; polynomials[i]->container.push_back(temp); } i++; } for (int i = 0; i < container.size(); i++) result = result + *polynomials[i]; return result; } };
void info() { cout << "沈琢乔" << endl; time_t nowtime; nowtime = time(NULL); struct tm *local; local = localtime(&nowtime); char buf[80]; strftime(buf, 80, "%Y-%m-%d %H:%M:%S", local); cout << buf << endl; getchar(); getchar(); }
int main() { Polynomial *polynomials[2]; int n = 2; for (int i = 0; i < n; i++) { cout << "请分别输入第" << i + 1 << "个二次项每项的系数和次数," << endl; cout << "输入0并摁回车即可退出输入," << endl; cout << "每行输入其中一项的系数和次数,中间用空格隔开:" << endl; polynomials[i] = new Polynomial(true); cout << endl; }
Polynomial add, substract, multiply; for (int i = 0; i < n; i++) { cout << "f" << i + 1 << ":" << endl; polynomials[i]->travelPrint(); } cout << "f1 + f2:" << endl; add = *polynomials[0] + *polynomials[1]; add.travelPrint(); cout << "f1 - f2:" << endl; substract = *polynomials[0] - *polynomials[1]; substract.travelPrint(); cout << "f1 * f2:" << endl; multiply = *polynomials[0] * *polynomials[1]; multiply.travelPrint(); info(); return 0; }
|