c++栈多项式求值源码带注释
时间: 2023-12-22 22:04:31 浏览: 106
好的,以下是C++栈多项式求值源码带注释:
```cpp
#include <iostream>
#include <stack> // 使用栈需要包含stack头文件
#include <string>
#include <cmath>
using namespace std;
// 定义一个结构体表示多项式的每一项
struct PolyItem {
double coef; // 系数
int expn; // 指数
};
// 定义一个函数,用于将字符串转换成多项式
stack<PolyItem> str2poly(string str) {
stack<PolyItem> polyStack; // 定义一个栈来保存多项式
int i = 0;
while (i < str.size()) {
PolyItem item;
// 获取系数
int j = i;
while (j < str.size() && str[j] != 'x') {
j++;
}
item.coef = stod(str.substr(i, j - i));
// 获取指数
if (j == str.size()) {
item.expn = 0;
} else {
i = j + 2; // 跳过"x^"
j = i;
while (j < str.size() && isdigit(str[j])) {
j++;
}
item.expn = stoi(str.substr(i, j - i));
i = j;
}
polyStack.push(item); // 将该项入栈
}
return polyStack;
}
// 定义一个函数,用于计算多项式的值
double calcPolyValue(stack<PolyItem> polyStack, double x) {
double result = 0.0;
while (!polyStack.empty()) {
PolyItem item = polyStack.top();
polyStack.pop();
result += item.coef * pow(x, item.expn); // 计算该项的值并累加到结果中
}
return result;
}
int main() {
string str;
cout << "请输入多项式(例如:2x^3+3x^2-4x+1):" << endl;
getline(cin, str);
stack<PolyItem> polyStack = str2poly(str); // 将字符串转换成多项式
double x;
cout << "请输入x的值:" << endl;
cin >> x;
double result = calcPolyValue(polyStack, x); // 计算多项式的值
cout << "多项式的值为:" << result << endl;
return 0;
}
```
主要思路是先将输入的多项式字符串转换成多项式结构体,然后利用栈来计算多项式的值。其中,`str2poly`函数用于将字符串转换成多项式,`calcPolyValue`函数用于计算多项式的值。在`str2poly`函数中,从头到尾扫描字符串,每次处理一个多项式的项,将该项的系数和指数保存到结构体中,并将该结构体入栈。在`calcPolyValue`函数中,从栈顶开始取出每一项,计算该项的值并累加到结果中。
注意:该代码只能处理单变量多项式,即多项式中只有一个未知量x。如果要处理多变量多项式,需要对代码进行相应修改。
阅读全文