Я бы использовал массив структур. Рассмотрим:
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 попадает в список, но - поскольку элементов так мало - накладные расходы на расчет / перемещение зондирующих позиций могут стоить больше, чем «промахи» от линейного поиска. (Если вы в отчаянии или скучаете, есть некоторые нанооптимизации, которые вы могли бы изучить, например, начиная со средней строки, чтобы минимизировать пропуски в худшем случае, или начиная со строки, которую вы последний раз сопоставляли, если входные значения имеют тенденцию быть похожими и т. Д.) *