题目:
Implement a basic calculator to evaluate a simple expression string.
The expression string contains only non-negative integers, +
, -
, *
, /
operators
and empty spaces . The integer division should truncate toward zero.
You may assume that the given expression is always valid.
Some examples:
"3+2*2" = 7 " 3/2 " = 1 " 3+5 / 2 " = 5
Note: Do not use the eval
built-in
library function.
Credits:
Special thanks to @ts for adding this problem and creating all test cases.
class Solution { public: int calculate(string s) { stack<int> st; int result = 0; int i = 0; while(i<s.size()) { int sum = 0; if(i<s.size()&&s.at(i)>='0'&&s.at(i)<='9') { while(i<s.size()&&s.at(i)>='0'&&s.at(i)<='9') { sum = sum * 10 + s.at(i)-'0'; i++; } st.push(sum); } else if(i<s.size()&&s.at(i)=='+') { st.push((int)s.at(i)); i++; } else if(i<s.size()&&s.at(i)=='-') { st.push((int)s.at(i)); i++; } else if(i<s.size()&&s.at(i)=='*') { int a = st.top(); st.pop(); int sum1 = 0; i++; while(s.at(i)==' ') { i++; } if(i<s.size()&&s.at(i)>='0'&&s.at(i)<='9') { while(i<s.size()&&s.at(i)>='0'&&s.at(i)<='9') { sum1 = sum1 * 10 + s.at(i)-'0'; i++; } a*=sum1; st.push(a); } } else if(i<s.size()&&s.at(i)=='/') { int a = st.top(); st.pop(); int sum1 = 0; i++; while(s.at(i)==' ') { i++; } while(i<s.size()&&s.at(i)>='0'&&s.at(i)<='9') { sum1 = sum1 * 10 + s.at(i)-'0'; i++; } a = (int)(a/sum1); st.push(a); } else { i++; } } stack<int> st1; while(!st.empty()) { st1.push(st.top()); st.pop(); } while(!st1.empty()) { int a = st1.top(); st1.pop(); if(st1.empty()) return a; else { if((char)(st1.top())=='+') { st1.pop(); int temp = st1.top()+a; st1.pop(); st1.push(temp); } else if((char)(st1.top())=='-') { st1.pop(); int temp = a-st1.top(); st1.pop(); st1.push(temp); } } } return st1.top(); } };
方法比较繁琐。。。就这样了。