Basic Calculator II
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.
Assume that the given expression was 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.
In contrast to the basic calculator,
The multiplication method has a high priority so that once it appears, it is calculated immediately,
All that is left in the last stack is the addition and subtraction calculation of sequential execution.
First the stack in reverse order, and then out of the stack calculation. Note that at this point the operands are in order in turn.
classSolution { Public: intCalculatestrings) {stack<int>num; Stack<Char>op; inti =0; while(I <s.size ()) { while(I < S.size () && s[i] = =' ') I++; if(i = =s.size ()) Break; if(S[i] = ='+'|| S[i] = ='-'|| S[i] = ='*'|| S[i] = ='/') {Op.push (s[i]); I++; } Else { intn =0; while(I < S.size () && S[i] >='0'&& S[i] <='9') {n= n *Ten+ (s[i]-'0'); I++; } num.push (n); if(!op.empty () && (op.top () = ='*'|| Op.top () = ='/')) { intN2 =Num.top (); Num.pop (); intN1 =Num.top (); Num.pop (); if(Op.top () = ='*') Num.push (N1*n2); ElseNum.push (N1/n2); Op.pop (); } } } //' + '/'-' in order if(!Op.empty ()) { //Reverse num and opstack<int>num2; while(!Num.empty ()) {Num2.push (Num.top ()); Num.pop (); } num=num2; Stack<Char>OP2; while(!Op.empty ()) {Op2.push (Op.top ()); Op.pop (); } op=OP2; while(!Op.empty ()) { //Pay attention to the operands order! intN1 =Num.top (); Num.pop (); intN2 =Num.top (); Num.pop (); if(Op.top () = ='+') Num.push (N1+n2); ElseNum.push (N1-n2); Op.pop (); } } returnNum.top (); }};
"Leetcode" 227. Basic Calculator II