测试结果6: 测试结果错误.错误结果为:a hundred and twenty-one billion thirty-two million forty-three thousand a hundred and fifty-four
正确结果应为:a hundred and twenty-one billion and thirty-two million and forty-three thousand a hundred and fifty-four
这个点,billion,million,thousand,后怎么能跟AND呢?
按常规应该不跟吧?
测试结果7: 测试结果错误.错误结果为:a hundred and sixty-five billion a hundred and seventy-six million a hundred and eithty-seven thousand a hundred and ninety-nine
正确结果应为:a hundred and sixty-five billion a hundred and seventy-six million a hundred and eighty-seven thousand a hundred and ninety-nine
这个点,我的好象和答案一样,但是你多了个空格.
测试结果8: 测试结果错误.错误结果为:a hundred billion two hundred million three hundred and a thousand four hundred and ten
正确结果应为:a hundred billion two hundred million three hundred and one thousand four hundred and ten
这个错的是a thousand 这个没道理啊,你样例里就是a thousand...
(样例:a hundred and eighty-one million eight hundred and a thousand eight hundred and eighteen point one eight one eight)
第八个点的数字应该是100,200,301,410千位应该是three hundred and one而不是three hundred and a。
Const
en:array[0..9] of string = (’zero’,’one’,’two’,’three’,’four’,’five’,’six’,’seven’,’eight’,’nine’);
enx:array[1..9] of string = (’a’,’two’,’three’,’four’,’five’,’six’,’seven’,’eight’,’nine’);
et:array[0..9] of string = (’zero’,’ten’,’twenty’,’thirty’,’forty’,’fifty’,’sixty’,’seventy’,’eighty’,’nin’+’ety’);
ev:array[1..9] of string = (’eleven’,’twelve’,’thirteen’,’fourteen’,’fifteen’,’sixteen’,’seventeen’,’eighteen’,’nine’+’teen’);
var
chi:string;point:string;zs:boolean;
function Char2Pos(c:char):integer;
begin
if(c=’D’)then Char2Pos:=1;
if(c=’S’)then Char2Pos:=2;
if(c=’B’)then Char2Pos:=3;
if(c=’Q’)then Char2Pos:=4;
if(c=’W’)then Char2Pos:=5;
if(c=’Y’)then Char2Pos:=9;
end;
function Chi2Num(c:string):string;
var
n:array[1..13] of integer;
j,t:integer;buf:string;
begin
fillchar(n,sizeof(n),0);
buf:=’’;
c:=c+’D’;
for j:=1 to length(c) do
begin
if(ord(c[j])>=48)and(ord(c[j])<=58)then
buf:=buf+c[j]
else
begin
val(buf,t);
if(c[j]<>’D’)and(t=0)then t:=1;
buf:=’’;
inc(n[Char2Pos(c[j])],t);
if(c[j]=’D’)then break;
end;
end;
for j:=1 to 12 do
if(n[j]>=10)then
begin
inc(n[j+1],n[j] div 10);
n[j]:=n[j] mod 10;
end;
t:=0;
Chi2Num:=’’;
for j:=12 downto 1 do
begin
if(n[j]>0)then inc(t);
if(t>0)then
begin
str(n[j],buf);
Chi2Num:=Chi2Num+buf;
end;
end;
end;
function Num2Eng(s:string;one1,wa:boolean):boolean;
var
t,j:integer;
begin
val(s,t);
if(t>0)then Num2Eng:=true;
if(t=0)then exit(false);
if(t>=100)then
begin
write(enx[t div 100],’ hundred’);
end;
if(t mod 100>0)and(t>100)then
write(’ and ’)
else
if(t<100)and(wa=true)then
write(’and ’);
t:=t mod 100;
if(t>0)then
begin
if(t mod 10=0)then
write(et[t div 10])
else
begin
if(t<10)then
begin
if(length(s)<3)and(one1=true)then
write(enx[t])
else
write(en[t]);
end
else
begin
if(t<20)then
write(ev[t-10])
else
write(et[t div 10] + ’-’ + en[t mod 10]);
end;
end;
end;
end;
function ProcPoint(s:string):string;
var j:integer;
begin
ProcPoint:=’’;
if(length(s)>0)then ProcPoint:=’ point’;
for j:=1 to length(s) do
ProcPoint:=ProcPoint+’ ’+en[ord(s[j])-48];
end;
begin
readln(Chi);
if(pos(’D’,Chi)>0)then
point:=ProcPoint(copy(Chi,pos(’D’,Chi)+1,length(Chi)));
if(pos(’Y’,Chi)>0)then
Chi:=Chi2Num(copy(Chi,1,pos(’Y’,chi)-1))+copy(Chi,pos(’Y’,chi),length(Chi));
if(pos(’W’,Chi)>0)then
Chi:=copy(Chi,1,pos(’Y’,chi))+Chi2Num(copy(Chi,pos(’Y’,chi)+1,pos(’W’,chi)-pos(’Y’,chi)-1))+copy(Chi,pos(’W’,chi),length(Chi));
Chi:=Chi2Num(Chi);
if(Chi=’0’)or(length(Chi)<1)then writeln(’zero’);
if(length(Chi)<12)then
Chi:=copy(’000000000000’,1,12-length(Chi))+Chi;
if(Num2Eng(copy(Chi,1,3),true,false)=true)then
begin
write(’ billion ’);
zs:=true;
end
else
zs:=false;
if(Num2Eng(copy(Chi,4,3),true,zs)=true)then
begin
write(’ million ’);
zs:=true;
end
else
zs:=false;
if(Num2Eng(copy(Chi,7,3),true,zs)=true)then
begin
write(’ thousand ’);
zs:=true;
end
else
zs:=false;
if(Num2Eng(copy(Chi,10,3),false,zs)=true)then write();
write(point);
end.
78184 lizhixin 235 Accepted 100分 FreePascal Xeond[6] 查看
78165 lizhixin 235 Unaccepted 90分 FreePascal Xeond[6] 查看
78163 lizhixin 235 Unaccepted 90分 FreePascal Xeond[6] 查看
78080 lizhixin 235 Unaccepted 70分 FreePascal Xeond[6] 查看
78065 lizhixin 235 Unaccepted 10分 FreePascal Xeost[5] 查看
77143 lizhixin 235 Unaccepted 20分 FreePascal Xeost[5] 查看
加了无数个条件:
program rq_235;
var s,fracc,CAO:string;
ch:array[0..10]of longint;
p,i,k,t,q:longint;
function sdfg(u:integer):string;
begin
case u of
1:sdfg:=’’;
2:sdfg:=’thousand ’;
3:sdfg:=’million ’;
4:sdfg:=’billion ’;
end;
end;
function cas(a:char):longint;
begin
case a of
’Q’:CAS:=1000;
’B’:CAS:=100;
’S’:CAS:=10;
’$’:CAS:=1;
END;
end;
function oul(st:string):longint;
var w:longint;
begin
st:=st+’$’;
oul:=0;
for w:=1 to length(st) do
begin
if st[w]=’S’ then
begin
if (w=1) or (st[w-1]=’0’) then inc(oul,10);
end;
if (st[w] in [’Q’,’B’,’S’,’$’]) and (w>1) and not ((st[w-1] in [’Q’,’B’,’S’,’$’])) then
inc(oul,cas(st[w])*(ord(st[w-1])-ord(’0’)));
end;
end;
begin
readln(s);
p:=pos(’D’,S);
q:=p;
if p<>0 then
begin
fracc:=copy(s,p+1,length(s)-p);
delete(s,p,length(s)-p+1);
end;
P:=pos(’Y’,s);
if p<>0 then
begin
t:=oul(copy(s,1,p-1));
delete(s,1,p);
ch[4]:=t div 10;
t:=t mod 10;
ch[3]:=t*100;
end;
p:=pos(’W’,s);
if p<>0 then
begin
t:=oul(copy(s,1,p-1));
delete(s,1,p);
inc(ch[3],t div 100);
ch[2]:=(t mod 100)*10;
end;
if length(s)>0 then
begin
t:=oul(s);
inc(ch[2],t div 1000);
ch[1]:=t mod 1000;
end;
k:=5;
while ch[k]=0 do dec(k);
if s=’0’ then s:=’zero ’ else s:=’’;
for i:=k downto 1 do
begin
if (ch[i]=1) and (i<>1) then
begin
s:=s+’a ’+sdfg(i);
continue;
end;
if ch[i] div 100>0 then
begin
case ch[i] div 100 of
1:s:=s+’a hundred ’;
2:s:=s+’two hundred ’;
3:s:=s+’three hundred ’;
4:s:=s+’four hundred ’;
5:s:=s+’five hundred ’;
6:s:=s+’six hundred ’;
7:s:=s+’seven hundred ’;
8:s:=s+’eight hundred ’;
9:s:=s+’nine hundred ’;
end;
end;
if (ch[i] div 100>0) and (ch[i] mod 100>0) then s:=s+’and ’;
if (ch[i]>0) and (ch[i]<100) and (length(s)>0) then s:=s+’and ’;
if ch[i] mod 100>0 then
begin
CAO:=’nine’;
case ch[i] mod 100 of
1:s:=s+’one ’;
2:s:=s+’two ’;
3:s:=s+’three ’;
4:s:=s+’four ’;
5:s:=s+’five ’;
6:s:=s+’six ’;
7:s:=s+’seven ’;
8:s:=s+’eight ’;
9:s:=s+’nine ’;
10:s:=s+’ten ’;
11:s:=s+’eleven ’;
12:s:=s+’twelve ’;
13:s:=s+’thirteen ’;
14:s:=s+’fourteen ’;
15:s:=s+’fifteen ’;
16:s:=s+’sixteen ’;
17:s:=s+’seventeen ’;
18:s:=s+’eighteen ’;
19:s:=s+CAO+’teen ’;
20:s:=s+’twenty ’;
21:s:=s+’twenty-one ’;
22:s:=s+’twenty-two ’;
23:s:=s+’twenty-three ’;
24:s:=s+’twenty-four ’;
25:s:=s+’twenty-five ’;
26:s:=s+’twenty-six ’;
27:s:=s+’twenty-seven ’;
28:s:=s+’twenty-eight ’;
29:s:=s+’twenty-nine ’;
30:s:=s+’thirty ’;
31:s:=s+’thirty-one ’;
32:s:=s+’thirty-two ’;
33:s:=s+’thirty-three ’;
34:s:=s+’thirty-four ’;
35:s:=s+’thirty-five ’;
36:s:=s+’thirty-six ’;
37:s:=s+’thirty-seven ’;
38:s:=s+’thirty-eight ’;
39:s:=s+’thirty-nine ’;
40:s:=s+’forty ’;
41:s:=s+’forty-one ’;
42:s:=s+’forty-two ’;
43:s:=s+’forty-three ’;
44:s:=s+’forty-four ’;
45:s:=s+’forty-five ’;
46:s:=s+’forty-six ’;
47:s:=s+’forty-seven ’;
48:s:=s+’forty-eight ’;
49:s:=s+’forty-nine ’;
50:s:=s+’fifty ’;
51:s:=s+’fifty-one ’;
52:s:=s+’fifty-two ’;
53:s:=s+’fifty-three ’;
54:s:=s+’fifty-four ’;
55:s:=s+’fifty-five ’;
56:s:=s+’fifty-six ’;
57:s:=s+’fifty-seven ’;
58:s:=s+’fifty-eight ’;
59:s:=s+’fifty-nine ’;
60:s:=s+’sixty ’;
61:s:=s+’sixty-one ’;
62:s:=s+’sixty-two ’;
63:s:=s+’sixty-three ’;
64:s:=s+’sixty-four ’;
65:s:=s+’sixty-five ’;
66:s:=s+’sixty-six ’;
67:s:=s+’sixty-seven ’;
68:s:=s+’sixty-eight ’;
69:s:=s+’sixty-nine ’;
70:s:=s+’seventy ’;
71:s:=s+’seventy-one ’;
72:s:=s+’seventy-two ’;
73:s:=s+’seventy-three ’;
74:s:=s+’seventy-four ’;
75:s:=s+’seventy-five ’;
76:s:=s+’seventy-six ’;
77:s:=s+’seventy-seven ’;
78:s:=s+’seventy-eight ’;
79:s:=s+’seventy-nine ’;
80:s:=s+’eighty ’;
81:s:=s+’eighty-one ’;
82:s:=s+’eighty-two ’;
83:s:=s+’eighty-three ’;
84:s:=s+’eighty-four ’;
85:s:=s+’eighty-five ’;
86:s:=s+’eighty-six ’;
87:s:=s+’eighty-seven ’;
88:s:=s+’eighty-eight ’;
89:s:=s+’eighty-nine ’;
90:s:=s+CAO+’ty ’;
91:s:=s+CAO+’ty-one ’;
92:s:=s+CAO+’ty-two ’;
93:s:=s+CAO+’ty-three ’;
94:s:=s+CAO+’ty-four ’;
95:s:=s+CAO+’ty-five ’;
96:s:=s+CAO+’ty-six ’;
97:s:=s+CAO+’ty-seven ’;
98:s:=s+CAO+’ty-eight ’;
99:s:=s+CAO+’ty-nine ’;
end;
end;
if ch[i]>0 then s:=s+sdfg(i);
end;
if q<>0 then
begin
s:=s+’point ’;
for i:=1 to length(fracc) do
case fracc[i] of
’0’:s:=s+’zero ’;
’1’:s:=s+’one ’;
’2’:s:=s+’two ’;
’3’:s:=s+’three ’;
’4’:s:=s+’four ’;
’5’:s:=s+’five ’;
’6’:s:=s+’six ’;
’7’:s:=s+’seven ’;
’8’:s:=s+’eight ’;
’9’:s:=s+’nine ’;
end;
end;
write(s);
end.
这题跟有空格没关系,我那个点有个eithty-没看出来,不过第8点我还是不理解.
test data 8
正确结果应为:a hundred billion two hundred million three hundred and (one thousand )four hundred and ten
明显两个不对啊