前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >程序员面试金典 - 面试题 16.26. 计算器(栈)

程序员面试金典 - 面试题 16.26. 计算器(栈)

作者头像
Michael阿明
发布2020-07-13 15:43:22
4570
发布2020-07-13 15:43:22
举报
文章被收录于专栏:Michael阿明学习之路

1. 题目

给定一个包含 正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。

表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。

代码语言:javascript
复制
示例 1:
输入: "3+2*2"
输出: 7

示例 2:
输入: " 3/2 "
输出: 1

示例 3:
输入: " 3+5 / 2 "
输出: 5

说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/calculator-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

代码语言:javascript
复制
几个易错例子
"2147483647"
" 3+5 / 2 "
"+3+2*2"
"-3+2*2"
代码语言:javascript
复制
class Solution {
public:
    int calculate(string s) {
    	long a, sum, i = 0;
    	char op = '+';
        while(i < s.size() && s[i]==' ')
            i++;//处理空格
    	stack<int> 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*10+s[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);
    		else
    			stk.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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档