算法:不同税率计算的个税问题

算法:不同税率计算的个税问题

1.一直银行利率,低于1000元,不用交税,超过的部分按照如下规则缴费.例如1750元工资需要缴纳个人所得税是:
taxes = 1000 * 0% + 500* 1% + 250 * 2%;

或者
若为2750元工资时候,

taxes = 1000 * 0% + 500* 1% +500 * 2% + 500* 3%+250* 3%;

输入:工资额
输出:需要缴纳的个人所得税

   /**
     * 计算税费:银行利率,低于1000元不用交税,超过的部分按照如下规则缴费.例如1750元工资需要缴纳个人所得税是:
     taxes = 1000 * 0% +  500* 1% + 250 * 2%;
     * @param salary
     * @return
     */
    public static float caculateSalaryTax(int salary) {
        if (salary <= 1000) return 0;
        int num = (salary - 1000)/500;
        int remain = (salary - 1000) % 500;
        int result = 0;
        for (int i = 1;i<= num ;i++) {
            result += 5000 * i *0.01;
        }
        result += remain * (num +1) *0.01;
        return result;

    }

2.问题延伸:如果原来的缴费不是等额度缴费,变成了【500,1000,1500,2500,4000,…】则写出相应的函数

输入:工资额

输出:需要缴纳的个人所得税

//时间太晚了,明天解决
 /**
     * 改进税率计算方式:如果原来的缴费不是等额度缴费,变成了500,1000,1500,2500,4000,...则写出相应的函数,低于500不交税
     * @param salary
     * @return
     */
    public static float caculateSalaryTax2(int salary) {
        if (salary <= 500) return 0;
        if (salary > 500 && salary <= 1000) return (salary -500) * 0.01f;

        float finalResult = 0;
        int count =1;
        while (funN(count) * 500 < salary) {
            count++;
        }
        int ratioIndex = count -1;
        for (int i = 1;i <= ratioIndex;i++) {
            finalResult = finalResult + (0.01f * i) * i * 500;
        }
        finalResult = finalResult + (ratioIndex +1)*0.01f * (salary - funN(ratioIndex) * 500);
        return finalResult;

    }

    /**
     * 递归:找出规律
     * @param n 表示
     * @return
     */
    public static int  funN(int n) {
        if (n == 1) return 2;
        return funN( n- 1) + (n-1);
    }

时间太晚了,这个里面还有一些小的bug没有处理,后期需要修复。

你可能感兴趣的:(算法)