[第1章 1.3t5] 表达式的转换
143 字
1 分钟
[第1章 1.3t5] 表达式的转换
#include <bits/stdc++.h>#define endl '\n'using namespace std;typedef long long ll;ll power(char a){ if(a=='+'||a=='-')return 1; if(a=='*'||a=='/')return 2; if(a=='^')return 3; return 0;}bool isop(string it){ if(it.size()==1&&string{"+-*/^"}.find(it[0])!=string::npos)return true; return false;}ll kua(ll a,ll b){ ll ans=1; while(b){ if(b%2)ans*=a; b/=2; a*=a; } return ans;}ll ca(ll a,ll b,char c){ if(c=='+')return b+a; if(c=='-')return b-a; if(c=='*')return b*a; if(c=='/')return b/a; if(c=='^')return kua(b,a);}int main(){ string str; cin>>str; vector<string> dq; deque<char> cal; for(ll i=0;i<str.size();){ char cnt=str[i]; if('0'<=cnt&&cnt<='9'){ string num; while(i<str.size()&&('0'<=str[i]&&str[i]<='9')) num+=str[i++]; dq.push_back(num); continue; }else if(cnt=='('){ cal.push_back('('); }else if(cnt==')'){ while(!cal.empty()&&cal.back()!='('){ string tran=string(1,cal.back()); dq.push_back(tran); cal.pop_back(); } if(!cal.empty())cal.pop_back(); }else{ while(!cal.empty()&&cal.back()!='('){ if(power(cnt)<=power(cal.back())&&cnt!='^'){ dq.push_back(string(1,cal.back())); cal.pop_back(); }else break; } cal.push_back(cnt); } i++; } while(!cal.empty()){ dq.push_back(string(1,cal.back())); cal.pop_back(); } for(ll i=0;i<dq.size();i++){ if(i!=0)cout<<' '; cout<<dq[i]; } cout<<endl; while(dq.size()>1){ for(ll j=0;j<dq.size();j++){ if(isop(dq[j])){ ll a=stoll(dq[j-1]); ll b=stoll(dq[j-2]); ll op=dq[j][0]; dq.erase(dq.begin()+j-2,dq.begin()+j+1); dq.insert(dq.begin()+j-2,to_string(ca(a,b,op))); break; } } for(ll j=0;j<dq.size();j++){ if(j!=0)cout<<' '; cout<<dq[j]; } cout<<endl; } return 0;}支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
相关文章智能推荐
1
16怪兽:手搓迷你容器
深入技术用 namespace 与 cgroups 亲手拼出一个最小可用的容器,回头对照 Docker 的每个概念。
2
15怪兽:底层原理
深入技术看懂 namespace、cgroups、veth、iptables 与 overlayfs 各自在哪一层做了什么。
3
14进阶:资源限制与性能
深入技术给容器划出 CPU 与内存的上限,并弄清一个容器为什么还能把宿主机拖垮。
4
13进阶:容器安全
深入技术把容器关进笼子:以非 root 运行、裁剪 Linux 能力、限制系统调用,并知道这些边界在哪。
5
总有一天我会搞清楚所有的细节
闲谈杂录如题
随机文章随机推荐





