牛客题霸 [表达式求值] C++题解/答案
题目描述
请写一个整数计算器,支持加减乘三种运算和括号。
题解:
没有除法emmm
我们从头开始依次判断每个字符
如果是左括号,我们就找右括号,并截取括号内的数字
记录上一次的符号,然后将处理后的数字的数字压入栈中
使得栈内的所有元素都是相加的关系
最后将栈内元素全部相加
详细可以看看代码
代码:
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可* 返回表达式的值* @param s string字符串 待计算的表达式* @return int整型*/int solve(string s) {// write code herestack<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;}
};