洛谷 P1449 字尾表示式
阿新 • • 發佈:2021-11-19
題目描述
所謂字尾表示式是指這樣的一個表示式:式中不再引用括號,運算子號放在兩個運算物件之後,所有計算按運算子號出現的順序,嚴格地由左而右新進行(不用考慮運算子的優先順序)。
如:3*(5–2)+7對應的字尾表示式為:3.5.2.-*7.+@。’@’為表示式的結束符號。‘.’為運算元的結束符號。
輸入格式
輸入:字尾表示式
輸出格式
輸出:表示式的值
輸入輸出樣例
輸入 #13.5.2.-*7.+@
輸出 #1
16
說明/提示
字串長度,1000內。
分析
將數字先存下來,遇到句號轉化成數字。熬夜狀態差,碼風稀爛。
#include<bits/stdc++.h>
using namespace std;
stack<int> num;
int main()
{
string a;
string l="";
cin>>a;
int n=a.size();
for(int i=0;i<n;i++)
{
if(a[i]=='.')
{
int new_num=0;
int l_size=l.size();
for(int i=0;i<l_size;i++)
{
new_num =new_num*10;
new_num+=l[i]-'0';//每次乘以10然後加上去
}
l="";//初始化
num.push(new_num);
}//讀完數字直接壓進去
if(a[i]>='0'&&a[i]<='9')//如果是數字
{
l+=a[i];//先統計起來
}
else if(a[i]=='-')
{
int b=num.top();
num.pop();
int c=num.top();
num.pop();
num.push(c-b);
}
else if(a[i]=='+')
{
int b=num.top();
num.pop();
int c=num.top();
num.pop();
num.push(c+b);
}
else if(a[i]=='*')
{
int b=num.top();
num.pop();
int c=num.top();
num.pop();
num.push(c*b);
}
else if(a[i]=='/')
{
int b=num.top();
num.pop();
int c=num.top();
num.pop();
num.push(c/b);
}
}
cout<<num.top()<<endl;
return 0;
}