比赛 |
20111102 |
评测结果 |
AAAAA |
题目名称 |
个人所得税 |
最终得分 |
100 |
用户昵称 |
Truth.Cirno |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2011-11-02 21:57:31 |
显示代码纯文本
#include <cstdio>
using namespace std;
int inf[50001][13]={{0}};
double total=0;
void cal_I(int n)
{
double truth;
if (n<=4000)
{
truth=n-800;
if (truth<0)
truth=0;
}
else
{
truth=n*0.8;
}
if (truth==0)
return;
/////////////////////
if (truth<=20000)
{
total+=truth*0.2;
truth=0;
}
else
{
total+=20000*0.2;
truth-=20000;
}
/////////////////////
if (truth<=30000)
{
total+=truth*0.3;
truth=0;
}
else
{
total+=30000*0.3;
truth-=30000;
}
/////////////////////
if (truth>=0)
{
total+=truth*0.4;
truth=0;
}
}
/*
一次性劳动报酬所得。按次计算征税,每次不超过4000元的,减除费用800元;4000元以上的,减除20%的费用,余额为应纳税所得额。征税税率如下表所示:
级数 每次应纳税所得额 税率(%)
1 不超过20000元的部分 20
2 超过20000元~50000元的部分 30
3 超过50000元的部分 40
*/
void cal_P(int n)
{
double truth;
truth=n-800;
if (truth<0)
truth=0;
if (truth==0)
return;
/////////////////////
if (truth<=500)
{
total+=truth*0.05;
truth=0;
}
else
{
total+=500*0.05;
truth-=500;
}
/////////////////////
if (truth<=1500)
{
total+=truth*0.1;
truth=0;
}
else
{
total+=1500*0.1;
truth-=1500;
}
/////////////////////
if (truth<=3000)
{
total+=truth*0.15;
truth=0;
}
else
{
total+=3000*0.15;
truth-=3000;
}
/////////////////////
if (truth<=15000)
{
total+=truth*0.2;
truth=0;
}
else
{
total+=15000*0.2;
truth-=15000;
}
/////////////////////
if (truth<=20000)
{
total+=truth*0.25;
truth=0;
}
else
{
total+=20000*0.25;
truth-=20000;
}
/////////////////////
if (truth<=20000)
{
total+=truth*0.3;
truth=0;
}
else
{
total+=20000*0.3;
truth-=20000;
}
/////////////////////
if (truth<=20000)
{
total+=truth*0.35;
truth=0;
}
else
{
total+=20000*0.35;
truth-=20000;
}
/////////////////////
if (truth<=20000)
{
total+=truth*0.4;
truth=0;
}
else
{
total+=20000*0.4;
truth-=20000;
}
/////////////////////
if (truth>=0)
{
total+=truth*0.45;
truth=0;
}
}
/*
工资、薪金所得。按月计算征税,以每月收入额减除费用800元后的余额作为该月应纳税所得额,税率如下表所示:
级数 月应纳税所得额 税率(%)
1 不超过500元的 5
2 超过500元~2000元的部分 10
3 超过2000元~5000元的部分 15
4 超过5000元~20000元的部分 20
5 超过20000元~40000元的部分 25
6 超过40000元~60000元的部分 30
7 超过60000元~80000元的部分 35
8 超过80000元~100000元的部分 40
9 超过100000元的部分 45
*/
int main(void)
{
freopen("personaltax.in","r",stdin);
freopen("personaltax.out","w",stdout);
int i,j,m,num,mon,money;
char str[20];
scanf("%d\n",&m);
//PAY 1 2/23 3800
//INCOME 2 4/8 4010
while (scanf("%s %d %d/%*d %d\n",&str,&num,&mon,&money)==4)
{
if (str[0]=='P')
inf[num][mon]+=money;
else
cal_I(money);
}
for (i=1;i<=m;i++)
for (j=1;j<=12;j++)
cal_P(inf[i][j]);
printf("%.2lf\n",total);
fclose(stdin);
fclose(stdout);
return(0);
}