Python程式:無需內建函式計算數學表示式
假設我們有一個字串,它表示一個包含 (+, -, *, /) 的數學表示式。這裡 / 表示整數除法,我們需要計算並返回結果,而無需使用任何內建函式。
例如,如果輸入為 s = "2+3*5/7",則輸出為 4,因為 2 + ((3 * 5) / 7) = 4
為了解決這個問題,我們將遵循以下步驟:
- s := 反轉給定的字串
- 定義一個函式 get_value()。
- sign := 1
- 如果 s 不為空且 s 的最後一個元素與 "-" 相同,則
- 從 s 中刪除最後一個元素
- sign := -1
- value := 0
- 當 s 不為空且 s 的最後一個元素是數字時,執行以下操作:
- value := value * 10
- value := value + s 中最後一個元素的數值,並刪除 s 的最後一個元素
- 返回 sign * value
- 定義一個函式 get_term()
- term := get_value()
- 當 s 不為空且 s 的最後一個元素是 * 或 / 時,執行以下操作:
- op := s 的最後一個元素,並從 s 中刪除最後一個元素
- value := get_value()
- 如果 op 與 "*" 相同,則
- term := term * value
- 否則,
- term := (1.0 * term / value) 的向下取整
- 返回 term
- 在主方法中執行以下操作:
- ans := get_term()
- 當 s 不為空時,執行以下操作:
- op := s 的最後一個元素,並從 s 中刪除它
- term := get_term()
- 如果 op 與 "+" 相同,則
- ans := ans + term
- 否則,
- ans := ans - term
- 返回 ans
讓我們來看下面的實現,以更好地理解:
示例
from math import floor, trunc class Solution: def solve(self, s): s = list(s[::-1]) def get_value(): sign = 1 if s and s[-1] == "-": s.pop() sign = -1 value = 0 while s and s[-1].isdigit(): value *= 10 value += int(s.pop()) return sign * value def get_term(): term = get_value() while s and s[-1] in "*/": op = s.pop() value = get_value() if op == "*": term *= value else: term = floor(1.0 * term / value) return term ans = get_term() while s: op, term = s.pop(), get_term() if op == "+": ans += term else: ans -= term return ans ob = Solution() s = "2+3*5/7" print(ob.solve(s))
輸入
"2+3*5/7"
輸出
4
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP