华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1365|回复: 3
打印 上一主题 下一主题

P1449 后缀表达式

[复制链接]

50

主题

215

帖子

619

积分

高级会员

Rank: 4

积分
619
跳转到指定楼层
楼主
发表于 2018-9-4 15:55:36 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

https://www.luogu.org/problemnew/show/P1449



题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。

如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。

输入输出格式
输入格式:
输入:后缀表达式

输出格式:
输出:表达式的值

输入输出样例
输入样例#1:
3.5.2.-*7.+@
输出样例#1:
16
说明
字符串长度,1000内。
回复

使用道具 举报

9

主题

158

帖子

470

积分

华一学生

积分
470
QQ
地板
发表于 2018-9-24 15:45:13 | 只看该作者
  1. #include<iostream>
  2. #include<stack>
  3. using namespace std;
  4. string s;
  5. stack<int>st;
  6. int k,p1,p2,ans;
  7. int main()
  8. {
  9.     cin>>s;
  10.     for(int i=0;i<s.size()-1;i++)
  11.         if(s[i]=='.')
  12.         {
  13.             st.push(k);
  14.             k=0;
  15.         }
  16.         else if(s[i]>='0'&&s[i]<='9')k=10*k+(s[i]-'0');
  17.         else
  18.         {
  19.             p1=st.top();
  20.             st.pop();
  21.             p2=st.top();
  22.             st.pop();
  23.             if(s[i]=='+')ans=p1+p2;
  24.             else if(s[i]=='-')ans=p2-p1;
  25.             else if(s[i]=='*')ans=p2*p1;
  26.             else if(s[i]=='/')ans=p2/p1;
  27.             st.push(ans);
  28.         }
  29.     cout<<st.top();
  30.     return 0;
  31. }
复制代码
回复 支持 反对

使用道具 举报

14

主题

106

帖子

317

积分

中级会员

Rank: 3Rank: 3

积分
317
板凳
发表于 2018-9-17 19:04:24 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. int a[1010],t;
  4. int l,top;
  5. string s;
  6. int main()
  7. {
  8.     cin>>s;top=0;
  9.     l=s.size();l--;
  10.     for(int i=0;i<l;i++)
  11.     {
  12.         if(s[i]=='.') {a[++top]=t;t=0;}
  13.         if(s[i]>='0'&&s[i]<='9') t=t*10+s[i]-'0';
  14.         if(s[i]=='+') {a[top-1]=a[top-1]+a[top];top--;}
  15.         if(s[i]=='-') {a[top-1]=a[top-1]-a[top];top--;}
  16.         if(s[i]=='*') {a[top-1]=a[top-1]*a[top];top--;}
  17.         if(s[i]=='/') {a[top-1]=a[top-1]/a[top];top--;}
  18.         ///for(int j=1;j<=5;j++) cout<<a[j]<<" ";cout<<top<<endl;
  19.     }
  20.     cout<<a[1];
  21.     return 0;
  22. }
复制代码
回复 支持 反对

使用道具 举报

50

主题

215

帖子

619

积分

高级会员

Rank: 4

积分
619
沙发
 楼主| 发表于 2018-9-4 15:55:52 | 只看该作者
  1. #include<iostream>
  2. #include<stack>
  3. #include<cstdio>
  4. using namespace std;
  5. stack<int>s;
  6. int num,n1,n2;
  7. char ch;
  8. string s1;
  9. int main()
  10. {
  11.     getline(cin,s1);
  12.     int i=0;
  13.     ch=s1[i];
  14.     while(ch!='@')
  15.     {
  16.         if(ch>='0' && ch<='9')num=num*10+(ch-'0');
  17.         if(ch=='.')
  18.         {
  19.             s.push(num);
  20.             num=0;
  21.         }
  22.         if(ch=='+')
  23.         {
  24.             n1=s.top();
  25.             s.pop();
  26.             n2=s.top();
  27.             s.pop();
  28.             n1=n2+n1;
  29.             s.push(n1);
  30.         }
  31.         if(ch=='-')
  32.         {
  33.             n1=s.top();
  34.             s.pop();
  35.             n2=s.top();
  36.             s.pop();
  37.             n1=n2-n1;
  38.             s.push(n1);
  39.         }
  40.         if(ch=='*')
  41.         {
  42.             n1=s.top();
  43.             s.pop();
  44.             n2=s.top();
  45.             s.pop();
  46.             n1=n2*n1;
  47.             s.push(n1);
  48.         }
  49.         if(ch=='/')
  50.         {
  51.             n1=s.top();
  52.             s.pop();
  53.             n2=s.top();
  54.             s.pop();
  55.             n1=n2/n1;
  56.             s.push(n1);
  57.         }
  58.         ch=s1[++i];
  59.     }
  60.     num=s.top();
  61.     cout<<num<<endl;
  62.     return 0;
  63. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-11-1 18:29 , Processed in 0.107878 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表