2017年4月23日 星期日

高中生解題系統 - a017: 五則運算

題目來源(高中生程式解題系統)
a017 - https://zerojudge.tw/ShowProblem?problemid=a017

目的:實作五則運算
等級:基礎偏上




個人感想雖然題目很基本就是單純做運算的題目,
但如果沒深思的話還是會遇到不少WA(本人至少WA10次以上..)

好不容易AC了所以還是提供一些思路給大家分享,

1. 這題是leftmost  (簡單來說就是同等級運算子最左邊先運算)
下面兩個式子是從討論串中找到,個人覺得測項很有幫助
(1) 2 - ( 0 - 3 ) * 3 + ( ( 0 - 8 ) * 2 % 7 ) + ( 0 - 9 ) * 6
(2) 1 + ( ( ( ( 2 + ( 3 + ( 0 - 4 ) ) * ( 8 + 9 ) ) / 5 /  ( 6 * 57 - 4 ) * 8 + 5 ) % 4 ) - 16 * 4 + 2 ) * 3
如果有做對leftmost,上面可以保證這一 點。

2. 這題可以很好練習Stack的用法,可以把運算元和運算子分別放在兩個Stack用來進行運算。

3. long long 是比較保險的做法,雖然題目表示輸入最大是在231 -1 (恰好是在unsigned int區間),但假設有做到相乘的話可能還是會超過,因此給大一點才不會爆掉)。

4. 無條件捨去,雖然有說明運算過程中都是整數處理,但保險起見還是以無條件捨去為前提去實作為佳。

大概做到以上四點原則上應該就有九成機會AC吧。

附上個人測試的程式(C語言)
https://drive.google.com/open?id=0B5UoilLM9krvUmNJLUFZbkJ2TzA

寫將近有兩百多行,我想有很大的改進空間就是~






沒有留言:

張貼留言