5-201612-2- 工资计算

试题编号: 201612-2
试题名称: 工资计算
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资(扣除五险一金后、未扣税前的工资)为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。

思路:画个坐标轴,列出表达式,慢慢推吧。

#include <iostream>
#include <algorithm>
using namespace std;
int a[1005];

int main(){
	int n; 
	cin >> n;
	
	/*
	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%;
	*/
	double sum = 0, a1 = n - 3500, a[6], b[6];
	a[0] = 1500 * 0.03;
	a[1] = (4500 - 1500) * 0.1;
	a[2] = (9000 - 4500) * 0.2;
	a[3] = (35000 - 9000) * 0.25;
	a[4] = (55000 - 35000) * 0.3;
	a[5] = (80000 - 55000) * 0.35;	
			
	for(int i = 1; i < 6; i++)
		a[i] = a[i] + a[i - 1];
	b[0] = 1500 - a[0] + 3500; //达到1500的税前工资 
	b[1] = 4500 - a[1] + 3500; 
	b[2] = 9000 - a[2] + 3500;
	b[3] = 35000 - a[3] + 3500;
	b[4] = 55000 - a[4] + 3500;
	b[5] = 80000 - a[5] + 3500;	
		
	if(n < 3500){
		cout << n << endl;
		return 0;
	} 
	
	if(n < b[0]){
		sum = (n - 3500 * 0.03)/(1-0.03);
	}
	else if(n < b[1]){
		sum = (n + a[0] - (3500 + 1500) * 0.1)/(1-0.1);
	}
	else if(n < b[2]){
		sum = (n + a[1] - (3500 + 4500) * 0.2)/(1-0.2); 
	}
	else if(n < b[3]){
		sum = (n + a[2] - (3500 + 9000) * 0.25)/(1-0.25);
	}
	else if(n < b[4]){
		sum = (n + a[3] - (3500 + 35000) * 0.3)/(1-0.3);
	}
	else if(n < b[5]){
		sum = (n + a[4] - (3500 + 55000) * 0.35) / (1-0.35);
	}
	else{
		sum = (n + a[5] - (3500 + 80000) * 0.45) / (1 - 0.45);
	}
	cout << sum << endl;
	
//	for(int i = 0; i < 6; i++){
//		cout << a[i] << " ";
//	}
	return 0;
} 

  

原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/9607390.html