淄博网站seo价格,个人注册登录,wordpress sae部署,世界十大建筑设计事务所1. 题目
给定一个包含 正整数、加()、减(-)、乘(*)、除(/)的算数表达式(括号除外)#xff0c;计算其结果。
表达式仅包含非负整数#xff0c;#xff0c; - #xff0c;*#xff0c;/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: 32*2
输…1. 题目
给定一个包含 正整数、加()、减(-)、乘(*)、除(/)的算数表达式(括号除外)计算其结果。
表达式仅包含非负整数 - */ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: 32*2
输出: 7示例 2:
输入: 3/2
输出: 1示例 3:
输入: 35 / 2
输出: 5说明
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。来源力扣LeetCode 链接https://leetcode-cn.com/problems/calculator-lcci 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。
2. 解题
几个易错例子
214748364735 / 2
32*2
-32*2class Solution {
public:int calculate(string s) {long a, sum, i 0;char op ;while(i s.size() s[i] )i;//处理空格stackint stk;if(i s.size() s[i] )i;else if(i s.size() s[i] -){op -;i;}for( ; i s.size(); i){a 0;while(i s.size() s[i] )i;//处理空格while(i s.size() isdigit(s[i]))a a*10s[i]-0;if(op *){ a stk.top() * a;stk.pop();sum 0;while(!stk.empty()){sum stk.top();stk.pop();}stk.push(sum);stk.push(a);}else if(op /){ a stk.top() / a;stk.pop();sum 0;while(!stk.empty()){sum stk.top();stk.pop();}stk.push(sum);stk.push(a);}else if(op -)stk.push(-a);elsestk.push(a);while(i s.size() s[i] )i;//处理空格if(i s.size())op s[i];}sum 0;while(!stk.empty()){sum stk.top();stk.pop();}return sum;}
};20 ms 8.8 MB