首碼運算式的計算

來源:互聯網
上載者:User
//nyoj 128首碼運算式#include <iostream>#include<stdio.h>
#include <sstream>#include <iomanip>#include <cstring>#include <stack>using namespace std;char Compare(char c,char d){switch (c){case '+':case '-': if(d=='+'||d=='-') return '>'; else return '<';case '*':case '/':return '>';default:break;}}bool IsChar(char c){if(c=='+'||c=='-'||c=='*'||c=='/')return true;return false;}void Change(char mid[],char post[]){int i=0,j=-1,l=strlen(mid);stack<char> s;int start,end,flag=0,k,p;char temp[20];char ch;while (i<l){if(IsChar(mid[i])||mid[i]==' ')  {if(flag)  {p=j;j=0; for(k=end;k>=(end-p);k--) mid[k]=temp[j++]; j=-1;flag=0; memset(temp,0,sizeof(temp));} ++i;continue;}if((mid[i]>='0'&&mid[i]<='9')||(mid[i]=='.')){end=i;flag=1;temp[++j]=mid[i];i++;}}if(flag)  {p=j;j=0; for(k=end;k>=(end-p);k--) mid[k]=temp[j++]; j=-1;flag=0; memset(temp,0,sizeof(temp));}//處理完小數點的問題,下面開始轉後面運算式i=0;while(i<l) {s.push(mid[i]);++i;}i=0;while(i<l) {ch=s.top();s.pop(); post[i++]=ch;}}double To(char a[]){stringstream oss;oss<<a;double result;oss>>result;return result;}double Operator(double a,char  b,double c){switch (b){case '+': return a+c;case '-': return a-c;case '*': return a*c;case '/': return a/c;}}double run(char post[]){stack<double> s;double result,x,y;char temp[20];memset(temp,0,sizeof(temp));int i=0,l=strlen(post),j=-1,flag=0;while (i<l){if((post[i]>='0'&&post[i]<='9')||(post[i]=='.')){temp[++j]=post[i];flag=1;++i;}else{if(flag==1){result=To(temp); s.push(result); j=-1;flag=0; memset(temp,0,sizeof(temp));}if(post[i]==' ') { ++i;continue;}else if(IsChar(post[i])){x=s.top(); s.pop();y=s.top(); s.pop();s.push(Operator(x,post[i],y));++i;}}}return s.top();}char mid[1008],post[1008];int main(){while (gets(mid)){Change(mid,post);cout<<setiosflags(ios::fixed)<<setprecision(2)<<run(post)<<endl;memset(mid,0,sizeof(mid));memset(post,0,sizeof(post));}return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.