麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

藍橋杯 表達式計算 By Assassin

2019-11-10 19:24:03
字體:
來源:轉載
供稿:網友

具體的分析講解可以看我的博客如下

利用棧實現表達式講解鏈接

下面直接上代碼,具體的分析在代碼的注釋中了~我是用string實現的~

#include<bits/stdc++.h>using namespace std;stack<char>sign; //記錄符號 queue<string>exchange; //記錄中綴式轉換為后綴式的輸出 stack<int>number; //以int形勢記錄后綴式計算時的值 int stackout(char c){ //棧外符號優先級值 if(c=='(') return 7; else if(c=='*'||c=='/') return 5; else if(c=='+'||c=='-') return 3; else if(c==')') return 1;}int stackin(char c){ //棧內符號優先級值 if(c=='(') return 1; else if(c=='*'||c=='/') return 5; else if(c=='+'||c=='-') return 3; else if(c==')') return 7;}int string_to_int(string s){ //string型轉int型 int ans=0; for(int i=0;i<s.size();i++){ ans=ans*10+(s[i]-'0'); } return ans;}int calc(string s){ string tmp=""; //記錄多位數的字符串 for(int i=0;i<s.size();i++){ if(s[i]>='0'&&s[i]<='9'){ //如果是字符,說明是數的一部分 tmp+=s[i]; } else { if(tmp!=""){ //必須有這個,因為可能出現*(這種情況,這個時候tmp是空的 exchange.push(tmp); tmp=""; } if(s[i]=='('){ //如果是(入棧 sign.push(s[i]); } else if(s[i]==')'){ //如果是)一直出棧到(出現 while(sign.top()!='('){ string zc=""; zc+=sign.top(); //char轉到string exchange.push(zc); sign.pop(); } sign.pop(); //彈出(,這個(是不出現在表達式中的 } else { if(sign.empty()){ //初始時如果棧是空的,不管是什么直接入棧 sign.push(s[i]); continue; } int sign1,sign2; sign1=stackout(s[i]); //計算當前比較字符的棧外優先級值 sign2=stackin(sign.top()); //計算棧頂比較字符的棧內優先級值 if(sign1<=sign2){ //當棧外值較小時 int sign3; string zc=""; //比較過了直接彈出記錄 zc+=sign.top(); exchange.push(zc); sign.pop(); while(!sign.empty()){ //繼續彈出記錄 sign3=stackin(sign.top()); if(sign3<=sign2) break; //直到出現大于棧頂操作符的優先級結束,注意現在都是和棧頂比的!!! zc.clear(); zc+=sign.top(); exchange.push(zc); sign.pop(); } sign.push(s[i]); //記著把棧外的入棧 } else{ sign.push(s[i]); //當棧外的優先級值大的時候直接入棧 } } } } if(tmp!=""){ //最后一個數進入后綴表達式 exchange.push(tmp); } while(!sign.empty()){ //未彈出的符號進入后綴表達式 string zc=""; zc+=sign.top(); exchange.push(zc); sign.pop(); } //計算后綴表達式了 while(!exchange.empty()){ tmp=exchange.front(); exchange.pop(); if(tmp[0]>='0'&&tmp[0]<='9'){ //是數字轉換后進入number中 number.push(string_to_int(tmp)); } else { int key,number1,number2; number2=number.top(); //注意number1和number2的順序! number.pop(); number1=number.top(); number.pop(); if(tmp=="+") key=number1+number2; if(tmp=="-") key=number1-number2; if(tmp=="*") key=number1*number2; if(tmp=="/") key=number1/number2; number.push(key); //計算完了入棧 } } cout<<number.top()<<endl; //剩下的最后一個就是結果 }int main(){ //freopen("input.txt","r",stdin); string s; while(cin>>s){ calc(s); } return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品国产乱码久久久久久丨区2区 | 国产精品一区自拍 | 成人精品一区二区 | 亚洲日本高清 | 久久中文字幕在线观看 | 亚洲欧洲日产v特级毛片 | 国产精品久久久久久久四虎电影 | 亚洲视频综合网 | 精品亚洲在线 | 久久久www视频 | 91一区二区三区久久久久国产乱 | 视频一区二区三区视频 | 国产亚洲精品久久久久5区 综合激情网 | 欧美日日操 | 91麻豆精品国产91久久久更新资源速度超快 | 91成人免费网站 | 一区二区三区视频在线 | 国产精品99久久久久久久 | 草莓视频在线导航 | 在线免费观看麻豆 | 欧美日韩在线播放 | 久久艹一区| 日韩视频在线一区二区三区 | 嫩嫩的freehdxxx | 麻豆小视频在线观看 | 久久网国产精品 | 国产电影av在线 | 最新av在线免费观看 | 久久久久久中文字幕 | 精品国产一区二区三区在线观看 | 国产一国产一级毛片视频在线 | 中文字幕综合在线观看 | 在线91视频| 久久久一区二区三区精品 | 久久精品中文字幕一区二区 | 免费观看一区二区三区视频 | 亚洲欧美日韩中文在线 | av成人在线播放 | 免费一级特黄欧美大片勹久久网 | 亚洲网站在线观看视频 | 亚洲一级电影在线观看 |