问题描述
试题编号: | 201612-2 |
试题名称: | 工资计算 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资(扣除五险一金后、未扣税前的工资)为S元,则他应交的个人所得税按如下公式计算: 输入格式 输入的第一行包含一个整数T,表示小明的税后所得。所有评测数据保证小明的税前工资为一个整百的数。 输出格式 输出一个整数S,表示小明的税前工资。 样例输入 9255 样例输出 10000 评测用例规模与约定 对于所有评测用例,1 ≤ T ≤ 100000。 |
本题可以将几个临界值求出来,通过查表,找出税前工资应该在哪个范围内。代码如下,详见注释:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//税率改变的几个临界值
int salary[]={3500,1500+3500,4500+3500,9000+3500,35000+3500,55000+3500,80000+3500};
//税率表
int tax[]={3,10,20,25,30,35,45};
const int size=sizeof(salary)/sizeof(int);
//range数组用来储存salary表中的各个值扣完税之后的值
int range[size];
int main()
{
int t,i,res;
cin>>t;
range[0]=salary[0];
//计算出range数组,按公式求即可
for(int i=1;i<size;i++)
range[i]=range[i-1]+(salary[i]-salary[i-1])-(salary[i]-salary[i-1])*tax[i-1]/100;
//找出所给的税后工资在哪个范围内
for(i=0;i<size;i++)
if(t<=range[i])
break;
//通过找到区间来确定税率,从而求出结果
if(i==0)
res=t;
else
res=salary[i-1]+(t-range[i-1])*100/(100-tax[i-1]);
cout<<res;
return 0;
}