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
//description:
//使用c++ 标准模版库 vector 容器,
//实现一元多项式的初始化、遍历打印、
//加法、减法及乘法操作。

#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;
}//重载“*”运算符
//f1 * f2 =a1*f2+a2*f2+...+an*f2
//ai*f2 => n个多项式,再将这n个多项式相加
};

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++)//输出f1,f2
{
cout << "f" << i + 1 << ":" << endl;
polynomials[i]->travelPrint();
}
cout << "f1 + f2:" << endl;//输出f1 + f2
add = *polynomials[0] + *polynomials[1];
add.travelPrint();
cout << "f1 - f2:" << endl;//输出f1 - f2
substract = *polynomials[0] - *polynomials[1];
substract.travelPrint();
cout << "f1 * f2:" << endl;//输出f1 * f2
multiply = *polynomials[0] * *polynomials[1];
multiply.travelPrint();
info();
return 0;
}

数据结构第一次作业.pdf