显然我们需要先处理乘除,后处理加法,其实不需要堆栈也是可以做的
- 首先我们把所有的运算符和操作数取出来。
- 然后依次遍历运算符,先处理*/,处理完之后保留操作结果,删除参与运算的符号以及操作数,因为没有括号,所以肯定是从左到右进行运算的,
bool check(char s) {
if (s == '+' || s == '-' || s == '*' || s == '/')return true;
else return false;
}
int main() {
string s;
while (getline(cin, s)) {
ll pos = 0, l = s.size(); vector<double> v; string op;
for (int i = 0; i < l; i++) {
if (check(s[i])) {
v.push_back(atoi(s.substr(pos, i - pos).c_str()));
op += s[i]; pos = i + 1;
}
}
v.push_back(atoi(s.substr(pos, s.size() - pos).c_str()));
int i = 0;
while (i < op.size()) {
if (op[i] == '*' || op[i] == '/') {
if (op[i] == '*')v[i] = v[i] * v[i + 1];
else v[i] = v[i] / v[i + 1];
op.erase(op.begin() + op.find(op[i]));
v.erase(v.begin() + i + 1);
}
else i++;
}
while (op.size() > 0) {
if (op[0] == '+')v[0] = v[0] + v[0 + 1];
else v[0] = v[0] - v[1];
op.erase(op.begin());
v.erase(v.begin() + 1);
}
cout << v[0] << endl;
}
}