P1449 后缀表达式
//后缀表达式求值
//https://www.luogu.com.cn/problem/P1449?contestId=96630
//错误点一:其中运算的每一个值不一定都是一位数,可能会有多位数的情况
#include<bits/stdc++.h>
using namespace std;
string str;
stack<long long > mystack;
long long now=0;
int main()
{
cin>>str;
for(string::iterator it=str.begin();it!=str.end();it++)
{
//扫到是数字则压入栈内
//扫到是操作符则出栈两次运算后压入栈内
//需要将字符的数字转化为int型的数字
if(*it=='@')
{
cout<<mystack.top();
break;
}
if(*it=='.')
{
if(now!=0)
{
mystack.push(now);
now=0;
}
continue;
}
if(isalnum(*it))
{
//可能操作数不是一位的需要判断
now=now*10;
now+=*it-'0';
continue;
}
if(!isalnum(*it))
{
//不是数字
if(*it=='+')
{
//是加的操作
long long right=mystack.top();//出栈右操作数
mystack.pop();
long long left=mystack.top();//出栈左操作数
mystack.pop();
long long mid=right+left;
mystack.push(mid);
}
if(*it=='-')
{
long long right=mystack.top();
mystack.pop();
long long left=mystack.top();
mystack.pop();
long long mid=left-right;
mystack.push(mid);
}
if(*it=='*')
{
long long right=mystack.top();
mystack.pop();
long long left=mystack.top();
mystack.pop();
long long mid=left*right;
mystack.push(mid);
}
if(*it=='/')
{
long long right=mystack.top();
mystack.pop();
long long left=mystack.top();
mystack.pop();
long long mid=left/right;
mystack.push(mid);
}
}
}
}

