演算法訓練 表示式計算

2021-08-16 10:17:33 字數 965 閱讀 7550

問題描述

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

輸入格式

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

輸出格式

輸出這個表示式的值。

樣例輸入

1-2+3*(4-5)

樣例輸出 -4

資料規模和約定

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

問題分析:利用雙棧乙個儲存運算子乙個儲存數字,這裡計算的方法是中綴表示式轉換成字尾表示式

就是比如乙個式子1+2*3-4時,在*號入棧事,我們要先考慮前面的數字1,2要不要計算,這裡就要有優先順序問題,如果現在的符號是×或者÷,那麼符號棧裡的前乙個符號,也就是top,必須也要是×或者÷這樣才能把前兩個數字計算出值,而如果現在的符號是+,-,那麼前面任何符號,除了『(』都可以計算。

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

stackstack_num;

stackstack_ch;

char str[110];

char num[110];

void com_all() //對於+,-,前面是+——*/都不影響前面的結果,可以先計算前面的

stack_num.push(num2);

stack_ch.pop(); }}

void com_mul_dev()

stack_num.push(num2);

stack_ch.pop(); }}

int main()

num[k] = 0;

if (num[0] != 0)

switch(str[i])

}printf("%d",stack_num.top());

return 0;

}

演算法訓練 表示式計算

上網查了一下,採用字尾表示式 從中序表示式 轉換為 後序表示式 由於後續表示式更易計算機去解決,所以我們在運算算術表示式時要先轉換為後序的。方法如下 建立符號棧 順序掃瞄中序表示式 a 是數字,直接輸出 b 是運算子 i 直接入棧 ii 將符號棧中的元素依次出棧並輸出,直到 只出棧,不輸出 iii ...

演算法訓練 表示式計算

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

演算法訓練 表示式計算

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