问题描述
小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资(扣除五险一金后、未扣税前的工资)为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。
代码
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int wage = n;
int wageAfter = n - 3500;
int wageBefore = 0;
//交税之后的工资,还是满足税的要求范围
int x1 = 0;
int x2 = 0;
int x3 = 0;
int x4 = 0;
int x5 = 0;
int x6 = 0;
//3500元以上的部分 计算个人所得税
if(wageAfter > 0){
x1 = 1500/100 *3; //45
x2 = (4500 - 1500)/10; //300
x3 = (9000 - 4500)/100 *20; //900
x4 = (35000 - 9000)/100 *25;//6500
x5 = (55000 - 35000)/100 *30;//6000
x6 = (80000 - 55000)/100 *35;//8750
//A中不超过1500元的部分,税率3%; 1500:1455
if(wageAfter <= 1455){
wage =( wageAfter /(100 - 3)*100 ) + 3500; // wageAfter / 0.97
}
//A中超过1500元未超过4500元的部分,税率10%; 4500: 4155
if(wageAfter > 1455 && wageAfter <= 4155){
wageBefore = wageAfter + x1;
wage = 1500+((wageBefore - 1500)/9*10) +3500; // 除以 0.9 得到(超过1500元未超过4500元的部分)的税 (wageAfter - 1500)/9
}
//A中超过4500元未超过9000元的部分,税率20%; 9000 : 7755
if(wageAfter > 4155 && wageAfter <= 7755){
wageBefore = wageAfter + x1 + x2;
wage = 4500+((wageBefore - 4500)/8*10) +3500;
}
//A中超过9000元未超过35000元的部分,税率25%; 35000: 27255
if(wageAfter > 7755 && wageAfter <= 27255){
wageBefore = wageAfter + x1 + x2 + x3;
wage = 9000+((wageBefore - 9000)/75*100) +3500;
}
// A中超过35000元未超过55000元的部分,税率30% 55000 : 41255
if(wageAfter > 27255 && wageAfter <= 41255){
wageBefore = wageAfter + x1 + x2 + x3+x4;
wage = 35000+((wageBefore - 35000)/7*10) +3500;
}
// A中超过55000元未超过80000元的部分,税率35% 80000 : 58730
if(wageAfter > 41255 && wageAfter <= 58730){
wageBefore = wageAfter + x1 + x2 + x3+x4+x5;
wage = 55000+((wageBefore - 55000)/65*100) +3500;
}
// A中超过80000元的部分,税率45%
if(wageAfter > 58730){
wageBefore = wageAfter + x1 + x2 + x3 + x4 + x5 + x6;
wage = 80000+((wageBefore - 80000)/55*100) +3500;
}
}
System.out.println(wage);
}
}
第二次做代码(100分):
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
double wage = t;
double tax = 0;
// 各阶段税收
double tax1 = 1500*0.03;
double tax2 = (4500-1500)*0.1;
double tax3 = (9000-4500)*0.2;
double tax4 = (35000-9000)*0.25;
double tax5 = (55000-35000)*0.3;
double tax6 = (80000-55000)*0.35;
//减税后的 最多的钱
double t1 =5000-tax1;
double t2 = 4500 + 3500-tax2-tax1;
double t3 = 9000+3500-tax1-tax2-tax3;
double t4 = 35000 + 3500 -tax1-tax2-tax3-tax4;
double t5 = 55000 + 3500 -tax1-tax2-tax3-tax4-tax5;
double t6 = 80000 + 3500 -tax1-tax2-tax3-tax4-tax5-tax6;
// 不超过1500元的部分,税率3%
if( t > 3500 && t <= t1){
tax = (t - 3500)/(1-0.03);
wage = tax + 3500;
}
//超过1500元未超过4500元的部分,税率10%
else if( t > t1 && t <= t2){
tax =( t-3500-1500+tax1)/(1-0.1);
wage = tax + 1500 +3500 ;
}
// 超过4500元未超过9000元的部分,税率20%
else if(t > t2 && t <= t3){
tax = (t-3500-4500+tax1+tax2)/(1-0.2);
wage = tax + 4500 +3500;
}
// 超过9000元未超过35000元的部分,税率25%
else if(t > t3 && t <= t4){
tax = (t-3500-9000+tax1+tax2+tax3)/(1-0.25);
wage = tax + 9000 +3500;
}
// 超过35000元未超过55000元的部分,税率30%
else if(t > t4 && t <= t5){
tax = (t-3500-35000+tax1+tax2+tax3+tax4)/(1-0.3);
wage = tax + 35000 +3500;
}
// 超过55000元未超过80000元的部分,税率35%
else if(t > t5 && t <= t6){
tax = (t-3500-55000+tax1+tax2+tax3+tax4+tax5)/(1-0.35);
wage = tax + 55000 +3500;
}
// 超过80000元的部分,税率45%
else if(t > t6){
tax = (t-3500-80000+tax1+tax2+tax3+tax4+tax5+tax6)/(1-0.45);
wage = tax + 80000 +3500;
}
int result = (int)wage;
System.out.println(result);
}
}