2011-01-21 30 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