主题:大牛们,帮个忙啊
我有一道题,挺菜的,只过了6个数据,实在没法了.路过的好心人,帮个忙吧,先谢谢拉!
某国个人所得税法规定,普通公民的主要应纳税收入项目及纳税金额如下:
工资、薪金所得。按月计算征税,以每月收入额减除费用800元后的余额作为该月应纳税所得额,税率如下表所示:
级数 月应纳税所得额 税率(%)
1 (0,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
一次性劳动报酬所得。按次计算征税,每次不超过4000元的,减除费用800元;4000元以上的,减除20%的费用,余额为应纳税所得额。征税税率如下表所示:
级数 每次应纳税所得额 税率(%)
1 (0,20000] 20
2 (20000,50000] 30
3 (50000,.....) 40
现在需要你编一程序,根据该国某公司的所有职员一年内的各项收入信息(收入项目、收入时间、收入金额)计算该公司所有职员这一年应交纳的个人所得税总额。
Input
输入文件的第一行为一个正整数M,表示该公司的职员总数(职员编号依次为1,2,…,M)。接下来的各行每行表示一年内某一个职员的一项收入信息。具体格式如下:
工资、薪金收入信息:PAY 职员编号 收入时间 收入金额
一次性劳务报酬收入信息:INCOME 职员编号 收入时间 收入金额
其中,收入时间格式为:MM/DD,MM表示月份,DD表示日期;收入金额是一个正整数(单位:元),并假设每人每项收入金额小于100万元。
输入文件以字符“#”表示结束。输入文件中同一行相邻两项之间用一个或多个空格隔开。
Output
输出文件只有一个正数P,保留两位小数。P表示该公司所有职员一年内应交纳的个人所得税总额(单位:元)
Sample Input
2
PAY 1 2/23 3800
INCOME 2 4/8 4010
INCOME 2 4/18 800
PAY 1 8/14 6700
PAY 1 8/10 1200
PAY 2 12/10 20000
#
Sample Output
5476.60
以下是我的程序:
var ch:char;
s,t:string;
n,moth,d,i,j,k,l:longint;
a:array[1..50000,1..12] of real;
sum,mon,q:real;
begin
readln(n); sum:=0;
repeat
s:=''; t:='';
read(ch);
if ch='#' then break;
while ch<>' ' do begin s:=s+ch; read(ch); end;//S为收入信息:PAY或INCOME
read(j);
while ch<>'/' do begin read(ch); t:=t+ch; end;//t为职员编号以后到'/'的字串;
l:=length(t);
if t[l-1]=' ' then val(copy(t,l-1,1),moth)
else val(copy(t,l-2,2),moth); //取出月份
readln(d,mon);
if s='PAY' then a[j,moth]:=a[j,moth]+mon;
if s='INCOME' then
begin
if mon<=4000 then
begin
mon:=mon-800;
if mon>0 then
if mon<=20000 then sum:=sum+mon*0.2 else
if mon<=50000 then sum:=sum+4000+(mon-20000)*0.3 else
sum:=sum+13000+(mon-50000)*0.4;
end else
begin
mon:=mon*0.8;
if mon<=20000 then sum:=sum+mon*0.2 else
if mon<=50000 then sum:=sum+20000*0.2+(mon-20000)*0.3 else
sum:=sum+20000*0.2+30000*0.3+(mon-50000)*0.4;
end;
end; //一次性收入的税
until false;
for i:=1 to n do
for j:=1 to 12 do
begin
a[i,j]:=a[i,j]-800;
if a[i,j]>0 then
if a[i,j]<=500 then sum:=sum+a[i,j]*0.05 else
if a[i,j]<=2000 then sum:=sum+25+(a[i,j]-500)*0.1 else
if a[i,j]<=5000 then sum:=sum+175+(a[i,j]-2000)*0.15 else
if a[i,j]<=20000 then sum:=sum+625+(a[i,j]-5000)*0.2 else
if a[i,j]<=40000 then sum:=sum+3625+(a[i,j]-20000)*0.25 else
if a[i,j]<=60000 then sum:=sum+8625+(a[i,j]-40000)*0.3 else
if a[i,j]<=80000 then sum:=sum+14625+(a[i,j]-60000)*0.35 else
if a[i,j]<=100000 then sum:=sum+21625+(a[i,j]-80000)*0.4 else
sum:=sum+29625+(mon-100000)*0.45;
end; //按月交的税
writeln(sum:0:2);
end.
谢谢啊!!
某国个人所得税法规定,普通公民的主要应纳税收入项目及纳税金额如下:
工资、薪金所得。按月计算征税,以每月收入额减除费用800元后的余额作为该月应纳税所得额,税率如下表所示:
级数 月应纳税所得额 税率(%)
1 (0,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
一次性劳动报酬所得。按次计算征税,每次不超过4000元的,减除费用800元;4000元以上的,减除20%的费用,余额为应纳税所得额。征税税率如下表所示:
级数 每次应纳税所得额 税率(%)
1 (0,20000] 20
2 (20000,50000] 30
3 (50000,.....) 40
现在需要你编一程序,根据该国某公司的所有职员一年内的各项收入信息(收入项目、收入时间、收入金额)计算该公司所有职员这一年应交纳的个人所得税总额。
Input
输入文件的第一行为一个正整数M,表示该公司的职员总数(职员编号依次为1,2,…,M)。接下来的各行每行表示一年内某一个职员的一项收入信息。具体格式如下:
工资、薪金收入信息:PAY 职员编号 收入时间 收入金额
一次性劳务报酬收入信息:INCOME 职员编号 收入时间 收入金额
其中,收入时间格式为:MM/DD,MM表示月份,DD表示日期;收入金额是一个正整数(单位:元),并假设每人每项收入金额小于100万元。
输入文件以字符“#”表示结束。输入文件中同一行相邻两项之间用一个或多个空格隔开。
Output
输出文件只有一个正数P,保留两位小数。P表示该公司所有职员一年内应交纳的个人所得税总额(单位:元)
Sample Input
2
PAY 1 2/23 3800
INCOME 2 4/8 4010
INCOME 2 4/18 800
PAY 1 8/14 6700
PAY 1 8/10 1200
PAY 2 12/10 20000
#
Sample Output
5476.60
以下是我的程序:
var ch:char;
s,t:string;
n,moth,d,i,j,k,l:longint;
a:array[1..50000,1..12] of real;
sum,mon,q:real;
begin
readln(n); sum:=0;
repeat
s:=''; t:='';
read(ch);
if ch='#' then break;
while ch<>' ' do begin s:=s+ch; read(ch); end;//S为收入信息:PAY或INCOME
read(j);
while ch<>'/' do begin read(ch); t:=t+ch; end;//t为职员编号以后到'/'的字串;
l:=length(t);
if t[l-1]=' ' then val(copy(t,l-1,1),moth)
else val(copy(t,l-2,2),moth); //取出月份
readln(d,mon);
if s='PAY' then a[j,moth]:=a[j,moth]+mon;
if s='INCOME' then
begin
if mon<=4000 then
begin
mon:=mon-800;
if mon>0 then
if mon<=20000 then sum:=sum+mon*0.2 else
if mon<=50000 then sum:=sum+4000+(mon-20000)*0.3 else
sum:=sum+13000+(mon-50000)*0.4;
end else
begin
mon:=mon*0.8;
if mon<=20000 then sum:=sum+mon*0.2 else
if mon<=50000 then sum:=sum+20000*0.2+(mon-20000)*0.3 else
sum:=sum+20000*0.2+30000*0.3+(mon-50000)*0.4;
end;
end; //一次性收入的税
until false;
for i:=1 to n do
for j:=1 to 12 do
begin
a[i,j]:=a[i,j]-800;
if a[i,j]>0 then
if a[i,j]<=500 then sum:=sum+a[i,j]*0.05 else
if a[i,j]<=2000 then sum:=sum+25+(a[i,j]-500)*0.1 else
if a[i,j]<=5000 then sum:=sum+175+(a[i,j]-2000)*0.15 else
if a[i,j]<=20000 then sum:=sum+625+(a[i,j]-5000)*0.2 else
if a[i,j]<=40000 then sum:=sum+3625+(a[i,j]-20000)*0.25 else
if a[i,j]<=60000 then sum:=sum+8625+(a[i,j]-40000)*0.3 else
if a[i,j]<=80000 then sum:=sum+14625+(a[i,j]-60000)*0.35 else
if a[i,j]<=100000 then sum:=sum+21625+(a[i,j]-80000)*0.4 else
sum:=sum+29625+(mon-100000)*0.45;
end; //按月交的税
writeln(sum:0:2);
end.
谢谢啊!!