问题描述
小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资(扣除五险一金后、未扣税前的工资)为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是多少元。
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。
解题思路:这道题也比较简单,主要为反算的一个过程。不过我想知道C语言中有没有像matlab中专门用来解方程的函数,如果有解题过程可以进一步简化。
具体代码:
1 #include<stdio.h> 2 int main(){ 3 float x1, x2, x3, x4, x5, x6, x7; 4 x1 = 3500 * 0.03; 5 x2 = -1500 * 0.03 + 5000 * 0.1; 6 x3 = -1500 * 0.03 - 3000 * 0.1 + 8000 * 0.2; 7 x4 = -1500 * 0.03 - 3000 * 0.1 - 4500 * 0.2 + 12500 * 0.25; 8 x5 = -1500 * 0.03 - 3000 * 0.1 - 4500 * 0.2 - 26000 * 0.25 + 38500 * 0.3; 9 x6 = -1500 * 0.03 - 3000 * 0.1 - 4500 * 0.2 - 26000 * 0.25 - 20000 * 0.3 + 58500 * 0.35; 10 x7 = -1500 * 0.03 - 3000 * 0.1 - 4500 * 0.2 - 26000 * 0.25 - 20000 * 0.3 - 25000 * 0.35 + 83500 * 0.45; 11 int y,x; 12 float s, t; 13 scanf("%d", &y); 14 t = (float)y; 15 if (t <= 3500) 16 s = t; 17 else if (t <= 4955) 18 s = (t - x1) / 0.97; 19 else if (t <= 7655) 20 s = (t - x2) / 0.9; 21 else if (t <= 11255) 22 s = (t - x3) / 0.8; 23 else if (t <= 30755) 24 s = (t - x4) / 0.75; 25 else if (t <= 43755) 26 s = (t - x5) / 0.7; 27 else if (t <= 61005) 28 s = (t - x6) / 0.65; 29 else 30 s = (t - x7) / 0.55; 31 x = (int)s; 32 printf("%d ", x); 33 return 0; 34 }
做题感悟:虽然简单,但是需要细心,因为划定税后的工资范围需要进行计算而不能直接使用税前工资的范围。