1157:表示式的值
time limit:1000ms memory limit:65536k
total submit:
94 accepted:27
[submit] [status] [discuss]
font size:
aa aa
aa
如果給你乙個只包含+,-,*,/,(,),及非負整數數字和空格組成的字串表示式,你能程式設計計算它的值嗎?不忙回答,,試試就知道了。
第一行為乙個n,表示測試樣例數。以下n行每個樣例為乙個字串表示式,每個表示式至少乙個字元,可能包含空格,但長度不超過50.
對每一測試樣例,輸出它的值。
3(2+3/3)+1
2+1/2-5
10*(2-2 )
4-30
題目輸入的表示式都是合法的.在測試2中,我們認為1/2=0,所以最後答案為-3.
swust
solution——
#include//不用iostream是為了節約時間,避免g++的cin,cout類多餘時間消耗#include
#include
using namespace std;
int calculate(int c, int a, int b)//計算函式
int main()
;//運算子優先操作
scanf("%d", &n);
getchar();
while(n--)
if(!k)//前括號直接進站
if(k != 5)//運算子入棧
stkch.push(k);
num.push(0); }
else//讀取後括號進行括號處理
int b = num.top();
num.pop();
int a = num.top();
num.pop();
num.push(calculate(stkch.top(), a, b));
stkch.pop(); }
} }
while(!stkch.empty() && num.size() > 1)//化為簡單無括號型後的運算,可以說是後事處理
printf("%d/n", num.top());//最後棧頂即結果
num.pop();//數字出棧,歸還空間 }
return 0;
}
括號匹配與表示式求值問題
運算子定義優先順序 1 0 1 1 2 2 從原表示式求字尾式的規則為 1.新建運算子棧,棧底元素為 作為運算子棧的結束符號 從第乙個位置起掃瞄表示式 2.若當前字元是運算元,則直接傳送給字尾表示式,掃瞄位置加1 3.若當前字元為運算子且優先順序大於棧頂運算子,則進棧,掃瞄位置加1。4.若當前字元為...
表示式求值
程式的說明見清華大學出版社 資料結構 c語言版 include include define stack init size 40 define stackincrement 20 define ok 1 define false 0 typedef structs stack typedef st...
表示式求值
既然是表示式求值,自然需要在記憶體中儲存計算結果以及中間值。在 用c語言寫直譯器 一 中提過 變數要求是若型別,而 c 語言中的 view plaincopy to clipboardprint?in basic io.h define memery size 26 typedef enum var...