#11290: 解本題的壹種方法——借用a248的算法


foundkey (foundkey)

學校 : 不指定學校
編號 : 58659
來源 : [183.206.161.135]
最後登入時間 :
2017-06-18 18:37:32
a647. 投資專家 | From: [114.221.188.128] | 發表日期 : 2016-08-18 20:43

很多人就被浮點數的誤差折騰很久,忽略四舍五入,8.98%那筆會出錯。不忽略四舍五入,其他題又會出錯。既然編譯器自帶的浮點數運算誤差不好控制,我們就自己來寫浮點數除法,通過a248那題的算法,把結果保存到壹個字符串中(我保留了3位小數,運算前我把價格的漲幅擴大到了100倍,這樣得到的結果直接是百分比)。得到字符串結果後,根據第三位小數的值對前面數據進行四舍五入的處理,就能得到正確的結果。

string praCalc(int a, int b, int pra); //將a除以b的結果放入字符串中返回,結果精確到小數點後pra位

以a=20000, b=21797這壹筆為子,

string result = praCalc((b - a) * 100, a, 3); //result的值為”8.985",註意這是壹個字符串

根據小數點後第三位的值(是否大於等於5)來判斷是否要進行四舍五入的,本次例子就需要,結果為“8.99",由於是字符串,四舍五入操作會比較麻煩。

最後要註意的是出現負數的情況,這裏沒有討論,大家自己小心。

還有就是”dispose“與”keep“的判斷,這個也留給大家討論。

前期後後測了11次才過。。。

 
ZeroJudge Forum