题意:设计一个计算器,实现四则运算。
思路:顺序处理,先处理乘除运算,再处理加减运算。注意最后一个数字及运算的处理。
class Solution {
public:
int calculate(string s) {
stack<int> addnumber;
stack<char> addop;
string tempnum = "";
char preop = '+';
for(int i = 0; i < s.length(); ++ i) {
if(s[i] == ' ') continue;
if(s[i] >= '0' && s[i] <= '9') {
tempnum += s[i];
}
else {
int num = std::stoi(tempnum);
tempnum = "";
if(preop == '*' || preop == '/') {
int tempnum = addnumber.top();
addnumber.pop();
if(preop == '*') addnumber.push(tempnum * num);
if(preop == '/') addnumber.push(tempnum / num);
preop = s[i];
if(s[i] == '-' || s[i] == '+') addop.push(s[i]);
continue;
}
preop = s[i];
if(s[i] == '-' || s[i] == '+') addop.push(s[i]);
addnumber.push(num);
}
}
if(preop == '*') {
int num1 = addnumber.top(); addnumber.pop();
int num2 = std::stoi(tempnum);
addnumber.push(num1 * num2);
}
else if(preop == '/') {
int num1 = addnumber.top(); addnumber.pop();
int num2 = std::stoi(tempnum);
addnumber.push(num1 / num2);
}
else addnumber.push(std::stoi(tempnum));
// add
stack<int> readdnumber;
while(!addnumber.empty()) {
readdnumber.push(addnumber.top());
addnumber.pop();
}
stack<char> readdop;
while(!addop.empty()) {
readdop.push(addop.top());
addop.pop();
}
int re = readdnumber.top();
readdnumber.pop();
while(!readdnumber.empty()) {
int num = readdnumber.top();
readdnumber.pop();
char op = readdop.top();
readdop.pop();
if(op == '-') re = re - num;
if(op == '+') re = re + num;
}
return re;
}
};