d031: Q_3_3 加減乘除
Tags : ch3
Accepted rate : 2人/3人 ( 67% ) [非即時]
評分方式:
Tolerant

最近更新 : 2022-06-17 10:23

Content

輸入一個只有加減乘除的計算式,請計算並輸出其結果。其中的數字皆為一位正整數,計算結果的絕對值不會超過10億。

Input

輸入一行是一個計算式,長度不超過100。假設是一個正確的計算式。

Output

 輸出計算結果。

Sample Input #1
5+2*3-6-7*2
Sample Output #1
-9
測資資訊:
記憶體限制: 256 MB
公開 測資點#0 (20%): 1.0s , <1K
公開 測資點#1 (20%): 1.0s , <1K
公開 測資點#2 (20%): 1.0s , <1K
公開 測資點#3 (20%): 1.0s , <1K
公開 測資點#4 (20%): 1.0s , <1K
Hint :

提示:因為加減乘除都是左結合的二元運算,左結合是指連續兩個運算時先算左邊,例如2-3-5=(2-3)-5。現在需要考慮的只有先乘除後加減。
一開始先將第一個數字放起來,接著從前往後掃描計算式,每次考慮兩個字元,第一個一定是個運算符號(op)第二個一定是個數字(num)。如果op是個乘法或除法,我們可以立刻將前面的運算結果與num做運算,因為沒有別的運算優先權高與乘除。如果是加法或減法,我們必須考慮兩種情形:(1)如果之前有被保留的運算要先執行,目前的運算要保留,因為後面可能是乘除法;(2)如果之前沒有被保留的運算,這個運算要被保留。在考慮一連串的運算過程中,最多只有一個運算會被保留,而且這個被保留的運算必定是加法或減法。最後要提醒一點:全部的運算都考慮完畢後要檢查是否有被保留的運算。
完整的expression evaluation可以在資料結構的課本上或是網路上查到,要考慮的因素很多,所以做法比較複雜。

 

Tags:
ch3
出處:
Prof. Wu [管理者:
ktlai (K.我已霸榜.tlai)
]


ID User Problem Subject Hit Post Date
沒有發現任何「解題報告」