7013 程式設計求乙個字尾表示式的值

2022-05-22 05:00:08 字數 1328 閱讀 1394

time limit: 1 second

memory limit: 128 mb

從鍵盤讀入乙個字尾表示式(字串),只含有0~9組成的運算數及加減乘除四種運算子,每個運算數之間用乙個空格隔開,運算數個數不超過30個,不需要判斷給你的表示式是否合法,以@為結束標誌。(不排除@後面還有內容)

1行字元,每個數字後面用空格隔開,運算子不用空格。

一行,運算出來的結果,結果保留整數。

16 9 4 3 +*-@
-47

【題解】

這題的難度在於字串的處理上。

我們讀入了乙個字串。但是我們不知道其是數字還是負號。所以要進行判斷。

如果s[0]∈[+ * /]則是符號。

但是如果s[0] == '-',則需要後續判斷因為這可能是乙個負數。

然後如果這個s的長度為1,則是符號。

如果長度不為1,則看一下s[1]是否為數字,如果為數字,則我們讀入的是乙個數字。否則我們讀入的是一

系列的符號。

讀到符號就把棧頂的兩個元素做相應的運算。下面那個 操作符 上面那個。

然後top--;stack[top] = 運算結果。

//而字首表示式則是 上面那個 操作符 下面那個。

會出現/*5這樣的情況。即符號和數字連在了一起。要注意處理。

【**】

#include #include #include #include using namespace std;

int top = 0;

double stack[255];

int main()

else

if (ss[0] == '*' || ss[0] == '/' || ss[0] == '+') //如果是其他負號 則一定是符號

issymbol = true;

else

isnumber = true;//否則就是數字

if (isnumber) //如果是數字,則入棧

else

double x; //因為涉及到除法運算 所以用實型

if (ss[j] == '*') //根據字元 做相應的運算即可。

if (ss[j] == '-')

if (ss[j] == '+')

if (ss[j] == '/')

j++;}}

s = s.erase(0,p+1);//連同空格一起刪掉。

p = s.find(' ',0);//然後繼續找那個空格的位置

} printf("%.0lf",stack[top]);//要保留整數輸出。

return 0;

}

中綴表示式轉字尾表示式 求字尾表示式值

中綴表示式轉字尾表示式 佇列q和棧s q存放字尾表示式結果 s存放操作符 設棧頂元素top 當前讀取元素a 演算法如果s是空棧 a入棧非空棧 a不是操作符,a插入佇列q 如果a為 a入棧 否則,如果a為 把棧內操作符出棧依次插入佇列q,直至遇到得 元素出棧為止 否則,如果a優先順序大於top,a入棧...

求字尾表示式的值

上篇文章介紹了 中綴表示式 轉 字尾表示式 這篇文章接著分享 計算字尾表示式的值 需求 求字尾表示式的值 輸入 字尾表示式 輸出 運算結果 from test05 stack.stack import stack import re defafter opt ret expr 運算元範圍 expr ...

中綴表示式轉字尾表示式 求表示式的值

中綴轉字尾需要遵守以下規則 1 運算元 直接輸出 2 直接入棧 3 將 以前的直接輸出,並將 出棧 不輸出 4 運算子 將優先順序不小於該運算子的操作符出棧,最後將該運算子入棧 5 最後將棧中的元素依次彈出 6 優先順序 大於 大於 class intosuf if op i equals if o...