在這裡, 我採用了另外一種方式計算表示式:由於表示式是中序表示式,
首先,將表示式變為後序表達,然後利用逆波蘭式的方法計算,僅僅只用乙個數字棧即可。
但是該方法的缺點是:只能計算單個字元的運算,因為對於百位等數字計算,後序表示式數字有歧義。
// ood.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include// this is system header file, so use <>
#include#include#includeusing namespace std;
/*the expression is infix notation:
in order to develop a more readable code:
i change the problem into two part:
first, change the infix notation into polish postfix notation (reverse polish notation)
second, calculate the postfix notation*/
bool isnumber(char c)
int level(char c)
}double cal(double n1,double n2, char sign)
}double cpe(string postfix)
else
}return numberstack.top();
}double calexpression(string s)
}signstack.push(tmp);
}i++;
} }while(!signstack.empty())
cout << "input expression is: " <
表示式計算
棧的應用舉例 棧在表示式計算過程中的應用 建立運算元棧和運算子棧。運算子有優先順序。規則 自左至右掃瞄表示式,凡是遇到運算元一律進運算元棧。當遇到運算子時,如果它的優先順序比運算子棧棧頂元素的優先順序高就進棧。反之,取出棧頂運算子和運算元棧棧頂的連續兩個運算元進行運算,並將結果存入運算元棧,然後繼續...
表示式計算
表示式計算對於我們人來說,喜歡通過中綴表示式來計算,而計算機則不一樣,需要通過字尾表示式來計算,首先通過例項來介紹一下中綴表示式和字尾表示式 例子 中綴表示式 3 5 2 3 6 字尾表示式 3 5 2 3 6 那麼轉換規則是怎麼樣的呢?規則 從左到右遍歷中綴表示式的每個數字和符號,若是數字就輸出,...
表示式計算
表示式計算 時間限制 1.0s 記憶體限制 256.0mb 問題描述 輸入乙個只包含加減乖除和括號的合法表示式,求表示式的值。其中除表示整除。輸入格式 輸入一行,包含乙個表示式。輸出格式 輸出這個表示式的值。樣例輸入 1 2 3 4 5 樣例輸出 4資料規模和約定 表示式長度不超過100,表示式運算...