P1449 后缀表达式
-
思路:
-
看一眼题目之后,第一反应是:输入难搞,小数负数,怎么读入,在我以为又要处理输出的时候,看到了题目难度: 普及-,en....
-
使用stack存储数字,当遇到运算符的时候就弹出栈顶的两个数字,进行操作,把操作的结果在push近stack中,遇到@结束.
-
对,就是一个水题
#include<iostream> #include<string> #include<stack> using namespace std; int opt(int a,int b,char c){ switch (c){ case '+': return a+b; case '-': return a-b; case '*': return a*b; default: return a/b; } return -1; } /* 第一波,先不考虑复数和小数 */ int main(){ // freopen("data.in","r",stdin); string ss; stack<int> s; cin>>ss; int t1=0,t2; for(int i=0;i<ss.length();i++){ if(ss[i]=='@') break; if(ss[i]=='.'){ // 一个数结束了 s.push(t1); t1 = 0; } if(ss[i]=='+'||ss[i]=='-'||ss[i]=='*'||ss[i]=='/'){ int a = s.top(); s.pop(); int b = s.top(); s.pop(); int c = opt(b,a,ss[i]); s.push(c); } if( ss[i]<='9'&&ss[i]>='0' ) t1 = t1*10+ss[i]-'0'; } cout<<s.top(); return 0; }
-