前言

switch+level这个办法是以前C语言老师教的,当时觉得好厉害~

【问题描述】

  小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资(扣除五险一金后、未扣税前的工资)为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,表示小明的税后工资。

【样例输入】

  10000

【样例输出】

  9255

代码

分析:

逆向思维,从高税率开始计算。

首先判断税前工资达到了缴税的哪一档,每超过一档level++,然后通过switch对每一档的金额计算应缴纳的税务。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>

using namespace std;

int calculate(int s)
{
int s_ = s - 3500;
int sum = 0;
int level = (s_ >= 0) + (s_ >= 1500) + (s_ >= 4500) + (s_ >= 9000) + (s_ >= 35000) + (s_ >= 55000) + (s_ >= 80000);

switch (level)
{
case 7:
sum += (s_ - 80000) * 0.45;
s_ = 80000;
case 6:
sum += (s_ - 55000) * 0.35;
s_ = 55000;
case 5:
sum += (s_ - 35000) * 0.3;
s_ = 35000;
case 4:
sum += (s_ - 9000) * 0.25;
s_ = 9000;
case 3:
sum += (s_ - 4500) * 0.2;
s_ = 4500;
case 2:
sum += (s_ - 1500) * 0.1;
s_ = 1500;
case 1:
sum += s_ * 0.03;
}

return s - sum;
}

int main()
{
int s;
cout << "请输入税前工资(元):";
cin >> s;
s = calculate(s);
cout << "您的税后工资为:" << s << "元";
}