2011-01-21 57 views
3

公司A有自己的系統,它用它來向賣方徵稅。稅收以漸進的方式計算。例如。如果賣方出售價值25美元的貨物,那麼前10美元稅額= 8%,剩餘15美元稅額= 7%。所以,稅收總額= 8的15用於計算累進稅的合適的數據結構

,他們用它來計算稅額如下:

$0 - $10 8% 
$11 - $50 7% 
$51 - $500 6% 
$501 - $10000 5% 
$10001 -$1000000 4% and so on. 

你會使用哪個數據結構來存儲這個表,以及如何將表25 + 7%%您使用該數據結構來編寫函數代碼 float computeTaxableAmount(float amount) {}

回答

3

我會使用一個結構數組。考慮:

fields: from to percentage cumulative 

values: 0  10 0.08  0 
     10 50 0.07  0.80 (= (to-from)*percentage from row above) 
     50 500 0.06  0.80 + (50-10)*0.07 = 4.00 
     500 10000 0.05  4.00 + (500-50)*0.06 = 31.00 
     ... 

請注意累計字段:通過簡單地達到相關稅收支架所隱含的合併稅額的運行總計。然後,說要對一些銷售X元的稅,你會發現該行包含X(即from <= X < to)和總稅收將是:

(X - from) * percentage + cumulative 

較早稅級的合併稅的預計算節省無謂在程序執行過程中重複數學運算。

您可以進行二分法搜索以找到X所包含的單個稅號,但是 - 由於元素太少,計算/移動探測位置的開銷可能比線性搜索中的「未命中」花費更多。 (如果感到絕望或無聊,那麼你可以探索一些納米優化,比如從中間行開始,以最小化最差情況失誤,或者如果輸入值趨於相似,則從最後匹配的行開始。)

+0

謝謝託尼。在採訪過程中,沒有點擊我可以存儲累計百分比。我每次都在計算它,這使得它變得複雜。 – kag 2011-01-21 17:48:22