[英]Evaluating a mathematical expression in C++
在我已經研究了一段時間的編碼問題中,我進入了一個步驟,必須評估如下所示的數學表達式:
3 * 2 ^ 3 ^ 2 * 5
並且應該這樣評估:
3 * 2 ^ 3 ^ 2 * 5 = 3 * 2^(3 * 2) * 5 = 3 * 64 * 5 = 960.
在實現的當前形式中,我有兩個向量,一個向量包含作為整數的操作數,而另一個向量包含作為char的運算符。
對於當前情況,它們是: vector<int> operands = { 3, 2, 3, 2, 5 }
和vector<char> operators = { '*', '^', '^', '*' }
。
這只是一個示例情況,運算順序可能有所不同,即乘法可能並不總是要執行的第一個/最后一個運算。
我在這個特定步驟上停留了一段時間,即將兩個向量容器封裝的表達式評估為整數。 我看了一些可以在網上找到的數學解析器,但是我仍然看不到如何實施適當的評估。
一個解決方案將不勝感激。
表達式模板可以滿足您的需求 。 它們使按非標准順序和/或行為評估表達式成為可能-使用它們,您還可以為表達式中的同一運算符定義多種含義。
解析表達式時只需計算值,即可為最終乘積保留一個變量,為當前被乘數保留一個變量(即具有對應基數的當前指數組)。 如您所見,依次應用每個指數操作數,從而執行左聯想指數。
順便說一句,我不會費心以某種矢量化格式存儲整個表達式。 我認為沒有有用的理由。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.