*step3_資料結構_ACM資料結構與STL 簡單計算器
阿新 • • 發佈:2019-02-08
帶有優先順序運算的這種洞悉,記得用棧。
第一遍迴圈是從左往右進行乘除運算。
第二遍是將加減完成!
#include<iostream> #include<stack> #include<sstream> #include<string> #include<iomanip> using namespace std; int main(){ string str; while(getline(cin,str)&&str!="0"){ stringstream ss(str); double t;char c; stack<double>s1; stack<char>s2; ss>>t;s1.push(t); while(ss>>c>>t){ s2.push(c); s1.push(t); if(s2.top()=='*'){ double a=s1.top();s1.pop(); double b=s1.top();s1.pop(); s1.push(a*b); s2.pop(); }else if(s2.top()=='/'){ double a=s1.top();s1.pop(); double b=s1.top();s1.pop(); s1.push(b/a);//使用棧時要特別注意順序 s2.pop(); } } double sum=0; while(!s2.empty()){ double a=s1.top();s1.pop(); if(s2.top()=='+'){ sum+=a; }else if(s2.top()=='-'){ sum-=a; } s2.pop(); } cout<<setiosflags(ios::fixed)<<setprecision(2)<<sum+s1.top()<<endl; } return 0; }