题目描述
请写一个整数计算器,支持加减乘三种运算和括号。
题解:
没有除法emmm
我们从头开始依次判断每个字符
如果是左括号,我们就找右括号,并截取括号内的数字
记录上一次的符号,然后将处理后的数字的数字压入栈中
使得栈内的所有元素都是相加的关系
最后将栈内元素全部相加
详细可以看看代码
代码:
class Solution {
public:
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 返回表达式的值 * @param s string字符串 待计算的表达式 * @return int整型 */
int solve(string s) {
// write code here
stack<int> st;
int sum = 0, number = 0;
char sign = '+';
for(int i=0; i<s.size(); i++)
{
char c = s[i];
if(c >= '0' && c <= '9')
{
number = number * 10 + c - '0';
}
if(c == '(')
{
int j = i+1;
int count = 1;
while(count > 0)
{
if(s[j] == '(') count++;
else if(s[j] == ')') count--;
j++;
}
number = solve(s.substr(i+1, j-(i+1)));
i = j-1;
}
if(c == '(' || c == ')' || c == '+' || c == '-' || c == '*' || c == '/' || i == s.size()-1)
{
if(sign == '+')
{
st.push(number);
}
else if(sign == '-')
{
st.push(-number);
}
else if(sign == '*')
{
int t = st.top(); st.pop();
st.push(t*number);
}
number = 0;
sign = c;
}
}
while(!st.empty())
{
sum += st.top();
st.pop();
}
return sum;
}
};