中綴表示式的值

2021-08-07 06:31:17 字數 1193 閱讀 7504

總時間限制: 

200ms 

記憶體限制: 

1024kb

描述

人們熟悉的四則運算表示式稱為中綴表示式,例如(23+34*45/(5+6+7))。在程式語言中,可以利用堆疊的方法把中綴表示式轉換成保值的字尾表示式(又稱逆波蘭表示法),並最終變為計算機可以直接執行的指令,得到表示式的值。

給定乙個中綴表示式,編寫程式,利用堆疊的方法,計算表示式的值。

輸入第一行為測試資料的組數n

接下來的n行,每行是乙個中綴表示式。表示式中只含數字、四則運算符和圓括號,運算元都是正整數,數和運算子、括號之間沒有空格。中綴表示式的字串長度不超過600。

輸出對每一組測試資料輸出一行,為表示式的值

樣例輸入

3

3+5*8

(3+5)*8

(23+34*45/(5+6+7))

樣例輸出

43

64108

提示注意:運算過程均為整數運算(除法運算'/'即按照c++定義的int除以int的結果,測試資料不會出現除數為0的情況),輸出結果也為整數(可能為負)。

中間計算結果可能為負。

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

stacks1;

stacks2;

int main()

else if(c=='(')

else if(c==')')

if(s=='-')

if(s=='*')

if(s=='/')

}s2.pop();

}else if(c=='+'||c=='-')

if(s=='-')

if(s=='*')

if(s=='/')

}s2.push(c);

}else if(c=='*'||c=='/')

if(s=='/')

}s2.push(c);

}c=cin.peek();

} cin.get();

while(!s2.empty())

if(s=='-')

if(s=='*')

if(s=='/')

}cout<

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

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

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

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

中綴表示式

實現 直接計算中綴表示式 不含括號 include include includeusing namespace std 運算符號優先順序比較 加減為低階運算,乘除是高階運算 先算乘除 return 1 means can calculate,else can not.int getpriority...