试题编号: | 201612-2 |
试题名称: | 工资计算 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资(扣除五险一金后、未扣税前的工资)为S元,则他应交的个人所得税按如下公式计算: 输入格式 输入的第一行包含一个整数T,表示小明的税后所得。所有评测数据保证小明的税前工资为一个整百的数。 输出格式 输出一个整数S,表示小明的税前工资。 样例输入 9255 样例输出 10000 评测用例规模与约定 对于所有评测用例,1 ≤ T ≤ 100000。 |
问题链接:CCF201612-2 工资计算
问题分析:问题的关键是要找到达到的最大的税率
程序说明:具体细节看程序注释
提交后得100分的C++程序:
#include<iostream>
using namespace std;
const int base=3500;//起征点为3500元
const double tax_max=0.45;//最大的税率
const double tax_rate[6]={0.03,0.1,0.2,0.25,0.3,0.35};//各阶段的税率
const int wage_pre[6] = {1500,4500,9000,35000,55000,80000};//A取各阶段值
const int wage_aft[6] = {1455,4155,7755,27255,41255,57505};//对应A税后的钱数
int main()
{
int t,s=0;
cin>>t;
t=t-base;
//确定达到的最大税率
if(t>wage_aft[5])//情况1:达到最大税率0.45
s=wage_pre[5]+(t-wage_aft[5])/(1-tax_max);
else if(t<=0) //情况2:达到最大税率为0
s=t;
else{//情况3:达到的最大税率在 (0,0.45)区间的其他税率
int i;
for(i=0;i<6;i++){
if(t>wage_aft[i])
s=wage_pre[i];
else
break;
}
if(i==0)
s=t/(1-tax_rate[0]);
else
s=s+(t-wage_aft[i-1])/(1-tax_rate[i]);
}
s=s+base;
cout<<s;
return 0;
}