用C++实现一个具有一定功能的计算器,能够进行整数、实数、复数的加、减、乘、除、乘方和求对数等运算。使用时算式采用后缀输入法,每个操作数、操作符之间都以空白符分隔。例如,若要计算3+5则输入3 5 +。
时间: 2023-12-28 19:22:33 浏览: 65
好的,这里是一个实现示例:
```c++
#include <iostream>
#include <stack>
#include <cmath>
using namespace std;
// 判断是否为操作符
bool isOperator(string str) {
return str == "+" || str == "-" || str == "*" || str == "/" || str == "^" || str == "log" || str == "ln";
}
// 计算操作符对应的运算结果
double calculate(string op, double num1, double num2 = 0) {
if (op == "+") {
return num1 + num2;
} else if (op == "-") {
return num1 - num2;
} else if (op == "*") {
return num1 * num2;
} else if (op == "/") {
return num1 / num2;
} else if (op == "^") {
return pow(num1, num2);
} else if (op == "log") {
return log10(num1);
} else if (op == "ln") {
return log(num1);
} else {
return 0;
}
}
int main() {
stack<double> numStack;
string input;
while (cin >> input) {
if (isOperator(input)) {
double num2 = numStack.top();
numStack.pop();
double num1 = numStack.top();
numStack.pop();
double result = calculate(input, num1, num2);
numStack.push(result);
} else {
double num = stod(input);
numStack.push(num);
}
}
if (!numStack.empty()) {
cout << numStack.top() << endl;
}
return 0;
}
```
这个实现也是使用栈来辅助计算,当读入一个操作符时,弹出栈顶的两个元素进行计算,并将结果入栈。当读入一个操作数时,直接将其入栈。最后,栈中只剩下一个元素,即为计算结果。这个实现同样没有处理输入错误的情况,需要进行验证和错误处理。
阅读全文