演算法訓練 表示式計算

2021-07-27 06:07:07 字數 2304 閱讀 9649

上網查了一下,採用字尾表示式

從中序表示式 轉換為 後序表示式

由於後續表示式更易計算機去解決,所以我們在運算算術表示式時要先轉換為後序的。方法如下

建立符號棧

順序掃瞄中序表示式

a) 是數字, 直接輸出

b) 是運算子

i : 「(」 直接入棧

ii : 「)」 將符號棧中的元素依次出棧並輸出, 直到 「(「, 「(「只出棧, 不輸出

iii: 其他符號, 將符號棧中的元素依次出棧並輸出, 直到 遇到比當前符號優先順序更低的符號或者」(「。 將當前符號入棧。

掃瞄完後, 將棧中剩餘符號依次輸出

例 : 3+(2-5)*6/3

遇到 3 是數字輸出

表示式 : 3

符號棧 :

遇到」+」 號 , 利用法則iii ,棧中沒有優先順序更低的符號, 直接入棧

表示式 : 3

符號棧 : +

遇到」(」 , 利用 法則i, 直接入棧

表示式 : 3

符號棧 : + (

遇到」2」 輸出

表示式 : 3 2

符號棧 : + (

遇到 「-」 , 利用法則iii , 遇到」(「, 沒有出棧符號, 直接入棧

表示式 : 3 2

符號棧 : + ( -

遇到」5」 輸出

表示式 : 3 2 5

符號棧 : + ( -

遇到」)」 利用法則ii , 將」-「號出棧輸出, 「(」 出棧

表示式 : 3 2 5 -

符號棧 : +

遇到」*」 利用法則ii , 「*」 比」+」的優先順序低, 所以遇到優先順序更低的符號, 不用出棧, 將」*」入棧

表示式 : 3 2 5 -

符號棧 : + *

遇到」6」 輸出

表示式 : 3 2 5 - 6

符號棧 : + *

遇到」/」 利用法則ii , 「/」 與」*」的優先相同, 就是說」*」不是優先順序更低的符號, 所以出棧輸出, 繼續 「+」比」/」的優先順序低, 不用出棧, 將」/」入棧

表示式 : 3 2 5 - 6 *

符號棧 : + /

遇到」3」 輸出

表示式 : 3 2 5 - 6 * 3

符號棧 : + /

掃瞄完成 將符號棧內的符號依次輸出

表示式 : 3 2 5 - 6 * 3 / +

直接過的**

# include 

# include

#include

#include

#include

using

namespace

std;

stack

s_ch;//符號棧

stack

s_num; //數值棧

stack

s_temp;

int strtoint(string s)

string inttostr(int num)

int main()

}else

s_ch.pop();

}else

else

if ((s[i] == '+' || s[i] == '-') && (s_ch.top() == "("))

s_ch.push(s1);

if ((s[i] == '*' || s[i] == '/') && (s_ch.top() == "+" || s_ch.top() == "-" || s_ch.top() == "("))

s_ch.push(s1);

else

if ((s[i] == '*' || s[i] == '/') && (s_ch.top() == "*" || s_ch.top() == "/"))}}

}}while (!s_ch.empty())

while(!s_num.empty())

int flag = 0;

string s3;

while (!s_temp.empty())

else

s_temp.pop();

}if(flag)

cout

<< a;

else

cout

/cout << ' ' << f;

}

演算法訓練 表示式計算

演算法訓練 表示式計算 時間限制 1.0s 記憶體限制 256.0mb 問題描述 輸入乙個只包含加減乖除和括號的合法表示式,求表示式的值。其中除表示整除。輸入格式 輸入一行,包含乙個表示式。輸出格式 輸出這個表示式的值。樣例輸入 1 2 3 4 5 樣例輸出 4 資料規模和約定 表示式長度不超過10...

演算法訓練 表示式計算

題外話 自己孤陋寡聞,不知道c 有棧函式。無賴寫了兩個型別的棧函式,函式寫好了,可是對於表示式中的整數,一位還好處理,可是上了兩位的我就不知道該怎樣轉換成整型了忘了atoi函式,浪費了好多時間 自己太渣了 最後看了的部落格豁然開朗。只要熟悉棧,知道atoi函式,這題處理起來就沒什麼問題.題目 問題描...

演算法訓練 表示式計算

問題描述 輸入乙個只包含加減乖除和括號的合法表示式,求表示式的值。其中除表示整除。輸入格式 輸入一行,包含乙個表示式。輸出格式 輸出這個表示式的值。樣例輸入 1 2 3 4 5 樣例輸出 4 資料規模和約定 表示式長度不超過100,表示式運算合法且運算過程都在int內進行。問題分析 利用雙棧乙個儲存...