zoukankan      html  css  js  c++  java
  • 洛谷 P1175 表达式的转换

    https://www.luogu.com.cn/problem/P1175

      1 #define bug(x) cout<<#x<<" is "<<x<<endl
      2 #include<bits/stdc++.h>
      3 using namespace std;
      4 #define pa pair<int,char>
      5 #define mk make_pair
      6 #define se second
      7 #define fi first
      8 const int N=2e6+10;
      9 struct node{
     10     int x;
     11     char c;
     12 };
     13 stack<char>s;
     14 stack<pa>s1,s2;
     15 queue<char>q;
     16 queue<pa>ans1;
     17 int n;
     18 char t[N];
     19 char ans[N];
     20 int b[N];
     21 int cal(int x,int y,char c){
     22     if(c=='+')return x+y;
     23     else if(c=='-')return x-y;
     24     else if(c=='*')return x*y;
     25     else if(c=='/')return x/y;
     26     else{
     27         int res=1;
     28         while(y--){
     29             res*=x;
     30         }
     31         return res;
     32     }
     33 } 
     34 
     35 void solve(){
     36     for(int i=1;i<=n;i++){
     37         if(t[i]>='0'&&t[i]<='9')q.push(t[i]);
     38         else if(t[i]=='(')s.push(t[i]);
     39         else if(t[i]=='^'){
     40             while(!s.empty()&&s.top()=='^'){
     41                 q.push(s.top());
     42                 s.pop();
     43             }
     44             s.push(t[i]);
     45         }
     46         else if(t[i]=='*'||t[i]=='/'){
     47             while(!s.empty()&&(s.top()=='^'||s.top()=='*'||s.top()=='/')){
     48                 q.push(s.top());
     49                 s.pop();
     50             }
     51             s.push(t[i]);
     52         }
     53         else if(t[i]=='+'||t[i]=='-'){
     54             while(!s.empty()&&s.top()!='('){
     55                 q.push(s.top());
     56                 s.pop();
     57             }
     58             s.push(t[i]);
     59         }
     60         else{
     61             while(!s.empty()&&s.top()!='('){
     62                 q.push(s.top());
     63                 s.pop();
     64             }
     65             if(s.top()=='(')s.pop();
     66         }
     67     }
     68     while(!s.empty()){
     69         q.push(s.top());
     70         s.pop();
     71     }
     72     int cnt=0,res=0,tot=0,f=0,c1=0;
     73     while(!q.empty()){
     74         if(q.front()<'0'||q.front()>'9')tot++;
     75         ans[++cnt]=q.front();
     76         ans1.push(mk(123321,ans[cnt]));
     77 
     78         printf("%c ",q.front());
     79         q.pop();
     80     }
     81     printf("
    ");
     82     while(tot--){
     83         f=0;
     84         while(!ans1.empty()){
     85             if(!f&&ans1.front().se!='A'&&(ans1.front().se<'0'||ans1.front().se>'9')){
     86                 f=1;
     87                 pa p1=s1.top();
     88                 s1.pop();
     89                 pa p2=s1.top();
     90                 s1.pop();
     91                 int x=0,y=0;
     92                 if(p2.fi==123321)x=p2.se-'0';
     93                 else x=p2.fi;
     94                 if(p1.fi==123321)y=p1.se-'0';
     95                 else y=p1.fi;
     96                 res=cal(x,y,ans1.front().se);
     97                 pa p3=mk(res,'A');
     98                 s1.push(p3);
     99             }
    100             else{
    101                 s1.push(ans1.front());
    102             }
    103             ans1.pop();
    104         }
    105         while(!s1.empty()){
    106                 s2.push(s1.top());
    107                 s1.pop();
    108             }
    109         while(!s2.empty()){
    110             pa p1=s2.top();
    111             s2.pop();
    112             ans1.push(p1);
    113             if(p1.fi!=123321)printf("%d ",p1.fi);
    114             else printf("%c ",p1.se);
    115         }
    116         printf("
    ");
    117     }
    118 }
    119 int main(){
    120     scanf("%s",t+1);
    121     n=strlen(t+1);
    122     solve();
    123 }
    124 /*
    125 8-(3+2*6)/5+4
    126 1+2*(3+4)/6-5
    127 3*4^(1+2)/3/8(1-4+2*5)-2^(1+2*3)
    128 
    129 */
  • 相关阅读:
    EXT--columnWidth
    EXT经验--查询items的xtype
    修改VS解决方案及工程名,解决如何打开高/版本VS项目
    jQuery Ajax 全解析(转)
    MS SqlSever一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】[转]
    .net框架版本说明
    [Ajax] 使用Ajax异步上传图片文件(非Form表单提交)
    CodeSmith 7.01破解下载
    jQuery插件之Cookie
    Oracle笔记 目录索引
  • 原文地址:https://www.cnblogs.com/ccsu-kid/p/13493970.html
Copyright © 2011-2022 走看看