華為OD機試-- 仿 LISP 運算

題目
LISP 語言唯一的語法就是括號要配對。
形如 (OP P1 P2 …),括號內(nèi)元素由單個空格分割。
其中第一個元素 OP 為操作符,后續(xù)元素均為其參數(shù),參數(shù)個數(shù)取決于操作符類型。
注意:
參數(shù) P1, P2 也有可能是另外一個嵌套的 (OP P1 P2 …) ,
當前 OP 類型為 add / sub / mul / div(全小寫),分別代表整數(shù)的加減乘除法,
簡單起見,所有 OP 參數(shù)個數(shù)均為 2 。
舉例:
輸入:(mul 3 -7)
輸出:-21
輸入:(add 1 2)
輸出:3
輸入:(sub (mul 2 4) (div 9 3))
輸出:5
輸入:(div 1 0)
輸出:error
題目涉及數(shù)字均為整數(shù),可能為負;
不考慮 32 位溢出翻轉(zhuǎn),計算過程中也不會發(fā)生 32 位溢出翻轉(zhuǎn),
除零錯誤時,輸出 “error”,
除法遇除不盡,向下取整,即 3/2 = 1
思路
1:可以參考 逆波蘭表達式 的解法。
2:核心還是數(shù)據(jù)結(jié)構(gòu):棧的使用方法。
遇到數(shù)字,入棧
遇到符號,彈出兩個數(shù),然后計算(棧底的元素在前,棧頂?shù)脑卦诤竺妫?,將計算的結(jié)果入棧
Java 實現(xiàn):https://renjie.blog.csdn.net/article/details/127972933
Python實現(xiàn):https://renjie.blog.csdn.net/article/details/131024286
C++ 實現(xiàn):https://renjie.blog.csdn.net/article/details/127322836
JavaScript實現(xiàn):https://renjie.blog.csdn.net/article/details/131024296
C實現(xiàn):https://renjie.blog.csdn.net/article/details/132006528