给你一个字符串表达式
s
,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。
示例 1:
输入:s = "3+2*2"
输出:7
示例 2:
输入:s = " 3/2 "
输出:1
示例 3:
输入:s = " 3+5 / 2 "
输出:5
提示:
1 <= s.length <= 3 * 105
s
由整数和算符('+', '-', '*', '/')
组成,中间由一些空格隔开s
表示一个 有效表达式- 表达式中的所有整数都是非负整数,且在范围
[0, 231 - 1]
内 - 题目数据保证答案是一个 32-bit 整数
因为题没有括号,直接用一个栈记录数值就行,然后用一个变量存储当前数字的前一个字符,如果是负数直接将数乘负一然后入栈,乘除的话直接和栈顶元素操作就行
class Solution {
public:
int calculate(string s) {
string str = "";
int len = s.size();
for(int i = 0;i < len;i++){
if(s[i]!=' ') str += s[i];
}
len = str.size();
s= str;
stack<long long> sta_int;
int fuhao = 1;
long long temp = 0 ;
char cnt = '0';
for(int i = 0;i < len;i++){
if(s[i]>='0'&&s[i]<='9'){
temp = temp * 10 + s[i] - '0';
}
else{
if(cnt=='*'){
sta_int.top() = sta_int.top() * temp;
}
else if(cnt=='/'){
sta_int.top() = sta_int.top() / temp;
}
else{
sta_int.push(temp*fuhao);
}
if(s[i]=='-') fuhao = -1;
else fuhao = 1;
cnt = s[i];
temp = 0;
}
}
if(cnt=='*'){
sta_int.top() = sta_int.top() * temp;
}
else if(cnt=='/'){
sta_int.top() = sta_int.top() / temp;
}
else{
sta_int.push(temp*fuhao);
}
long long out = 0 ;
while(sta_int.size()){
out += sta_int.top();
sta_int.pop();
}
return int(out);
}
};