代码改变世界

编程珠玑第三章

2012-07-27 10:31  javaspring  阅读(292)  评论(0编辑  收藏  举报

1、本书出版之时,美国的个人收入所得税分为5种不同的税率,其中最大的税率大约为40%.以前的情况则更为复杂,税率也更高。下面所示的程序文本采用25个if语句的合理方法来计算1978年的美国联邦所得税。税率序列为0.14, 0.15, 0.16, 0.17, 0.18.....。序列中此后的计算大于0.01.有何建议呢?
if income <= 2200
    tax = 0;
else if income <= 2700
    tax = 0.14 * (income - 2200);
else if income <= 3200
    tax = 70 + 0.15 * (income - 2700);
else if income <= 3700
    tax = 145 + 0.16 * (income -3200);
else if income <= 4200
    tax =225 + 0.17 * (income - 3700);
.......
else
    tax =53090 + 0.70 * (income - 102200);

改进:

int  basetax[]={0, 0 ,70, 145, 225,...};

int  taxrate[]={0, 0.14, 0.15, 0.16,...};

int  lowerbound[]={0, 2200, 2700, 3200, 3700,...};

查找出工资在lowerbound中的位置段i,例如在2200~2700之间,则 i=1

则 tax = basetax[i] + taxrate[i] * ( income - lowerbound[i] )

 

2、   a[n] = a[n-1]*c[1]

   for(k=1;k<n;++k)
    {
        for(i=1;i<k;++i)
            a[k] = a[k-i] * c [i];
 
        a[k] += c[k+1]; 
    }