P1449 后綴表達(dá)式
//后綴表達(dá)式求值
//https://www.luogu.com.cn/problem/P1449?contestId=96630
//錯(cuò)誤點(diǎn)一:其中運(yùn)算的每一個(gè)值不一定都是一位數(shù),可能會(huì)有多位數(shù)的情況
#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++)
? ?{
? ? ? ?//掃到是數(shù)字則壓入棧內(nèi)
? ? ? ?//掃到是操作符則出棧兩次運(yùn)算后壓入棧內(nèi)
? ? ? ?//需要將字符的數(shù)字轉(zhuǎn)化為int型的數(shù)字
? ? ? ?if(*it=='@')
? ? ? ?{
? ? ? ? ? ?cout<<mystack.top();
? ? ? ? ? ?break;
? ? ? ?}
? ? ? ?if(*it=='.')
? ? ? ?{
? ? ? ? ? ?if(now!=0)
? ? ? ? ? ?{
? ? ? ? ? ? ? ?mystack.push(now);
? ? ? ? ? ? ? ?now=0;
? ? ? ? ? ?}
? ? ? ? ? ?continue;
? ? ? ?}
? ? ? ?if(isalnum(*it))
? ? ? ?{
? ? ? ? ? //可能操作數(shù)不是一位的需要判斷
? ? ? ? ? now=now*10;
? ? ? ? ? now+=*it-'0';
? ? ? ? ? continue;
? ? ? ?}
? ? ? ?if(!isalnum(*it))
? ? ? ?{
? ? ? ? ? ?//不是數(shù)字
? ? ? ? ? ?if(*it=='+')
? ? ? ? ? ?{
? ? ? ? ? ? ? ?//是加的操作
? ? ? ? ? ? ? ?long long right=mystack.top();//出棧右操作數(shù)
? ? ? ? ? ? ? ?mystack.pop();
? ? ? ? ? ? ? ?long long ?left=mystack.top();//出棧左操作數(shù)
? ? ? ? ? ? ? ?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);
? ? ? ? ? ?}
? ? ? ?}
? ?}
}