输入表达式计算出值
#include <iostream> #include <stack> #include <algorithm> #include <cmath> using namespace std; stack<int> nums; stack<char> ops; void cal() { int a = nums.top(); nums.pop(); int b = nums.top(); nums.pop(); char c = ops.top(); ops.pop(); int d = 0; if (c == '+') d = b + a; else if (c == '-') d = b - a; else if (c == '*') d = b * a; else if (c == '/') d = b / a; else d = pow(b, a); // ^ nums.push(d); } int main() { string str; cin >> str; string left; for (int i = 0; i < str.size(); i++) left += '('; str = left + str + ')'; for (int i = 0; i < str.size(); i++) { if (isdigit(str[i])) { int j = i, t = 0; while (isdigit(str[j])) { t = t * 10 + str[j] - '0'; j++; } nums.push(t); i = j - 1; } else { char c = str[i]; if (c == '(') ops.push(c); else if (c == '+' || c == '-') { if (c == '-' && i && !(isdigit(str[i - 1])) && str[i - 1] != ')') { int j = i + 1, t = 0; while (isdigit(str[j])) { t = t * 10 + str[j] - '0'; j++; } nums.push(-t); i = j - 1; } else { while (ops.top() != '(') cal(); ops.push(c); } } else if (c == '*' || c == '/') { while (ops.top() == '*' || ops.top() == '/' || ops.top() == '^') cal(); ops.push(c); } else if (c == '^') { while (ops.top() == '^') cal(); ops.push(c); } else if (c == ')') { while (ops.top() != '(') cal(); ops.pop(); } else cout << "invalid operator!" << endl; } } cout << nums.top() << endl; return 0; }