简单计算器
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
Sample Input
1 + 2 4 + 2 * 5 - 7 / 11 0
Sample Output
3.00 13.36
emmm题目就这样, 其实一开始我也不会写stack考虑怎么用递归去写的
思路就是先计算+和—, 因为他们的优先级比较低, 需要先进性加减乘除运算, 我们写递归是倒着进去的, 所以由优先级高的要放到后边处理
#include <algorithm>
#include <cstring>
#include <iostream>
#include <stack>
#include <string>
#include <vector>
using namespace std;
string op;
int getnum(int l, int r) {
double num = 0;
if (l >= r)
return 0;
else {
for (int i = r - 1; i >= l; i--) {
if (op[i] == '+') {
return getnum(l, i) + getnum(i + 1, r);
} else if (op[i] == '-') {
return getnum(l, i) - getnum(i + 1, r);
}
}
for (int i = r - 1; i >= l; i--) {
if (op[i] == '*') {
return getnum(l, i) * getnum(i + 1, r);
} else if (op[i] == '/') {
return getnum(l, i) / getnum(i + 1, r);
}
}
for (int i = l; i <= r - 1; i++) {
if (op[i] >= '0' && op[i] <= '9') {
num = num * 10.0 + op[i] - '0';
}
}
}
return num;
}
int main() {
while (getline(cin, op)) {
if (op.size() == 1)
return 0;
else
cout << getnum(0, op.size()) << endl;
}
return 0;
}
今天写了一天h5和css, 内心感受还是算法好玩哈哈哈