您的位置:首页 > 编程语言 > C语言/C++

Basic Calculator II | LeetCode 48ms C++ Solution

2015-11-22 22:33 453 查看
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.

解题思路:这里首先需要考虑的就是*和/,即乘法和除法相对于减法和加法的优先级。所以这里使用两个栈,分别存储操作符和操作数

操作符只存储加号和减号,当遇到乘号和除法时,立即进行计算并压入栈,代码如下:

int calculate(string s) {

int res=0;

int size=s.size();

stack<int> numbers;

stack<char> operate;

operate.push('+');

for(int i=0;i<size;){

char cur=s[i];

//跳过空格

if(cur==' '){

++i;

continue;

}

//处理乘法和除法

if(cur=='*'||cur=='/'){

int step=i+1;

while(s[step]==' ')

++step;

int num=0;

while(s[step]>='0'&&s[step]<='9'){

num=num*10+s[step]-'0';

++step;

}

i=step;

int num2=numbers.top();

numbers.pop();

if(cur=='*'){

num=num*num2;

}else{

num=num2/num;

}

numbers.push(num);

continue;

}else if(cur=='-'||cur=='+'){

operate.push(cur);

++i;

}else{

int step=i;

int num=0;

while(s[step]>='0'&&s[step]<='9'){

num=num*10+s[step]-'0';

++step;

}

i=step;

numbers.push(num);

}

}

// return numbers.top();

while(!numbers.empty()){

char oper=operate.top();

operate.pop();

int num=numbers.top();

numbers.pop();

if(oper=='-')

res+=(-1*num);

else

res+=num;

}

return res;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: