表示式計算

2021-08-17 07:53:20 字數 1210 閱讀 1436

表示式計算  

時間限制:1.0s   記憶體限制:256.0mb

問題描述

輸入乙個只包含加減乖除和括號的合法表示式,求表示式的值。其中除表示整除。

輸入格式

輸入一行,包含乙個表示式。

輸出格式

輸出這個表示式的值。

樣例輸入

1-2+3*(4-5)

樣例輸出

-4資料規模和約定

表示式長度不超過100,表示式運算合法且運算過程都在int內進行。

解題思路:1.請先看

中綴表示式轉換成字尾表示式過程,轉換方法參考這裡

2.大概過程是建立兩個全域性棧num,c分別壓入表示式的數字與符號,當遇到壓入符號優先順序小於等於棧頂符號優先順序時(優先順序:"(">"*"="/">"+"="-">")"),即棧頂永遠是優先順序最大的,因為遇到優先順序等於小於壓入棧時,就會對兩個棧取值進行計算(即數字棧取兩個和字元棧取乙個進行計算,得出結果壓入數字棧),直到棧頂符號優先順序更大或者棧被取完,然後存入該符號。當輸入的字串迴圈完後,檢查數字棧的長度如果不唯一就對兩個棧取值進行計算。(所有的運算遇到棧頂為"("就會終止。)

3.大佬的畫圖詳細描述:

**如下:

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

stacknum;//壓入數

stackc;//壓入字元

string data;

bool js1(char a);

void js();

int js2(int a,int b,char c);

int main()

num.push(temp);

}else if(data[i] == '(')else

if(data[i] != ')')

c.push(data[i]);

} i++;

} while(num.size() != 1)

}//傳入引數,進行計算。

int js2(int a,int b,char c)

}//判斷傳入字元優先順序是否高於棧頂字元,並如果棧為空返回false;

bool js1(char a)

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

}else

}}

表示式計算

棧的應用舉例 棧在表示式計算過程中的應用 建立運算元棧和運算子棧。運算子有優先順序。規則 自左至右掃瞄表示式,凡是遇到運算元一律進運算元棧。當遇到運算子時,如果它的優先順序比運算子棧棧頂元素的優先順序高就進棧。反之,取出棧頂運算子和運算元棧棧頂的連續兩個運算元進行運算,並將結果存入運算元棧,然後繼續...

表示式計算

表示式計算對於我們人來說,喜歡通過中綴表示式來計算,而計算機則不一樣,需要通過字尾表示式來計算,首先通過例項來介紹一下中綴表示式和字尾表示式 例子 中綴表示式 3 5 2 3 6 字尾表示式 3 5 2 3 6 那麼轉換規則是怎麼樣的呢?規則 從左到右遍歷中綴表示式的每個數字和符號,若是數字就輸出,...

表示式計算

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