链接:https://ac.nowcoder.com/acm/contest/31546/C 来源:牛客网
给定牛牛一个后缀表达式s,计算它的结果,例如,1+1对应的后缀表达式为1#1#+,‘#’作为操作数的结束符号。 其中,表达式中只含有‘+’、’-‘、’*‘三种运算,不包含除法。 本题保证表达式一定合法,且计算过程和计算结果的绝对值一定不会超过10^{18}10 18
示例1 输入 复制 "1#1#+" 返回值 复制 2
利用stack容器
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 给定一个后缀表达式,返回它的结果
* @param str string字符串
* @return long长整型
*/
long long legalExp(string str) {
// write code here
stack<long long> v;
long long ans;
for(int i=0;i<str.length();i++)
{ ans=0;
while(str[i]>='0'&&str[i]<='9')
{
ans=ans*10+str[i]-48; i++;
}
//v.push(ans);
//cout<<"ans= "<<ans<<endl;
if(str[i]=='+')
{
long long res = v.top();
v.pop();
res+=v.top();
v.pop();
v.push(res); continue;
}
else if(str[i]=='-')
{
long long res = v.top();
v.pop();
long long sec = v.top();
v.pop();
v.push(sec-res); continue;
}
else if(str[i]=='*')
{
long long res = v.top();
v.pop();
long long sec = v.top();
v.pop();
v.push(res*sec); continue;
}
v.push(ans);
}
return v.top();
}
};