Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- const int inf = 1e9;
- int Num(char a){return a - '0';}
- bool isNum(char a){return '0' <= a and a <= '9';}
- int calculate(string s) {
- int sz = s.size();
- stack <int> st;
- int sign = 1;
- for(int i=0;i<sz;i++){
- if(s[i] == ' ') continue;
- else if(s[i] == '+')
- sign = 1;
- else if(s[i] == '-')
- sign = -1;
- else if(isNum(s[i])){
- int num = 0;
- for(;i < sz and isNum(s[i]); i++){
- num = 10 * num + Num(s[i]);
- }
- i --;
- st.push(sign);
- st.push(num);
- }
- else if(s[i] == '('){
- st.push(sign);
- st.push(inf);
- sign = 1;
- }
- else if(s[i] == ')'){
- int val = 0;
- int num = 0;
- int sign = 1;
- while(true){
- num = st.top(); st.pop();
- sign = st.top(); st.pop();
- if(num == inf) break;
- val += num * sign;
- }
- st.push(sign);
- st.push(val);
- sign = 1;
- }
- }
- int ans = 0;
- while(!st.empty()){
- int num = st.top(); st.pop();
- int sign = st.top(); st.pop();
- ans += num * sign;
- }
- return ans;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement