【CSP】【Java】工资计算

问题描述

小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资(扣除五险一金后、未扣税前的工资)为S元,则他应交的个人所得税按如下公式计算:
  1) 个人所得税起征点为3500元,若S不超

过3500,则不交税,3500元以上的部分才计算个人所得税,令A=S-3500元;   2) A中不超过1500元的部分,税率3%;
  3) A中超过1500元未超过4500元的部分,税率10%;   4) A中超过4500元未超过9000元的部分,税率20%;   5)
A中超过9000元未超过35000元的部分,税率25%;   6) A中超过35000元未超过55000元的部分,税率30%;   7)
A中超过55000元未超过80000元的部分,税率35%;   8) A中超过80000元的部分,税率45%;
  例如,如果小明的税前工资为10000元,则A=10000-3500=6500元,其中不超过1500元部分应缴税1500×3%=45元,超过1500元不超过4500元部分应缴税(4500-1500)×10%=300元,超过4500元部分应缴税(6500-4500)×20%=400元。总共缴税745元,税后所得为9255元。
  已知小明这个月税后所得为T元,请问他的税前工资S是多少元。

输入格式

输入的第一行包含一个整数T,表示小明的税后所得。所有评测数据保证小明的税前工资为一个整百的数。

输出格式

输出一个整数S,表示小明的税前工资。

样例输入

9255

样例输出

10000

评测用例规模与约定

对于所有评测用例,1 ≤ T ≤ 100000。


这道题可是坑了我个坑呀,都是自己刚开始就没读清楚题目的要求结果就----白打了好长时间。

  • 先是没看清已知与所求,结果自己按照顺序思维蹭蹭往下写,繁杂的计算。
  • 再是没看清题目的工资都是整百元

之后就思维混乱的,没啥心思再干了,去百度了下各位大神的做法。我其中借鉴了一位大神的做法,思考了片刻之后终于解决。
借鉴网址:https://blog.csdn.net/sunjinshengli/article/details/78820845

思考过程

这个问题并不复杂。简单分析一下:
工资的计算公式如下:
T = S - tax
其中,T为税后工资,S为税前工资,tax为需缴纳的税款,并且tax与S存在函数关系:
tax = f(S)
这个函数就是一个简单的分段函数:几个节点如下表:

【CSP】【Java】工资计算

先放代码

package _2_08_工资计算;

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int T = scanner.nextInt(); //输入之后的工资
		double S = 0;  //之前的工资
		if(T <= 3500)
            S = T;
        else if(T <=4955){
            S = (T-105)/0.97;
        }else if(T <=7655){
            S = (T-455)/0.9;
        }else if(T <=11255){
            S = (T-1255)/0.8;
        }else if(T <=30755){
            S = (T-1880)/0.75;
        }else if(T <=44755){
            S = (T-3805)/0.7;
        }else if(T <=61005){
            S = (T-6730)/0.65;
        }else{
            S = (T-15080)/0.55;
        }
		System.out.println((int)Math.floor(S+0.5));
	}
}

像代码里的 105 455…我刚开始很迷或不知道怎么计算出来的。然后就举了个栗子进行计算。 结果其实就是一个简单的数学问题,然后把 计算式子化简所得。
例如 : T = S -(S-3500)*0.97 化简,反解S即可。


第二个问题 ——Java的精度问题

这个我受那个博主的启发,但又不同于他,我选择了用 +0.5向下取整的方法解决。


Java除法的解决方案 两种方法

上一篇:#子序列自动机,vector#洛谷 3500 [POI2010]TES-Intelligence Test


下一篇:阿里Java学习路线:阶段 2:数据库开发-数据库及SQL/MySQL基础:课时18:DQL(数据查询语言)之模糊查询(包含stu表及数据)