p2311.pas
来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· PAS 代码 · 共 153 行
PAS
153 行
PROGRAM p2311;
TYPE
Node=record
Inglish :String;
num :Longint;
end;
VAR
i :Integer;
negative :Boolean;
order :array[1..4]of Node;
dic :array[1..28]of Node;
s :String;
PROCEDURE Makedic;
begin
with dic[1] do begin Inglish:='zero'; num:=0; end;
with dic[2] do begin Inglish:='one'; num:=1; end;
with dic[3] do begin Inglish:='two'; num:=2; end;
with dic[4] do begin Inglish:='three'; num:=3; end;
with dic[5] do begin Inglish:='four'; num:=4; end;
with dic[6] do begin Inglish:='five'; num:=5; end;
with dic[7] do begin Inglish:='six'; num:=6; end;
with dic[8] do begin Inglish:='seven'; num:=7; end;
with dic[9] do begin Inglish:='eight'; num:=8; end;
with dic[10] do begin Inglish:='nine'; num:=9; end;
with dic[11] do begin Inglish:='ten'; num:=10; end;
with dic[12] do begin Inglish:='eleven'; num:=11; end;
with dic[13] do begin Inglish:='twelve'; num:=12; end;
with dic[14] do begin Inglish:='thirteen'; num:=13; end;
with dic[15] do begin Inglish:='fourteen'; num:=14; end;
with dic[16] do begin Inglish:='fifteen'; num:=15; end;
with dic[17] do begin Inglish:='sixteen'; num:=16; end;
with dic[18] do begin Inglish:='seventeen'; num:=17; end;
with dic[19] do begin Inglish:='eighteen'; num:=18; end;
with dic[20] do begin Inglish:='nineteen'; num:=19; end;
with dic[21] do begin Inglish:='twenty'; num:=20; end;
with dic[22] do begin Inglish:='thirty'; num:=30; end;
with dic[23] do begin Inglish:='forty'; num:=40; end;
with dic[24] do begin Inglish:='fifty'; num:=50; end;
with dic[25] do begin Inglish:='sixty'; num:=60; end;
with dic[26] do begin Inglish:='seventy'; num:=70; end;
with dic[27] do begin Inglish:='eighty'; num:=80; end;
with dic[28] do begin Inglish:='ninety'; num:=90; end;
with order[1] do begin Inglish:='negative'; num:=-1; end;
with order[2] do begin Inglish:='hundred'; num:=100; end;
with order[3] do begin Inglish:='thousand'; num:=1000; end;
with order[4] do begin Inglish:='million'; num:=1000000; end;
end;
FUNCTION Change(s:String):Longint;
var
flag :Boolean;
make :String;
i :Integer;
ans,temp :Longint;
begin
ans:=0;
temp:=0;
while length(s)>0 do
begin
if pos(' ',s)>0 then
begin
make:=copy(s,1,pos(' ',s)-1);
delete(s,1,pos(' ',s));
end else
begin
make:=s;
s:='';
end;
flag:=false;
for i:=1 to 4 do
if order[i].Inglish=make then
begin
flag:=true;
break;
end;
if flag then
begin
if i=1 then negative:=true else
begin
temp:=temp * order[i].num;
ans:=ans + temp;
temp:=0;
end;
end else
begin
for i:=1 to 28 do
if dic[i].Inglish=make then
begin
flag:=true;
break;
end;
if not flag then while true do;
temp:=temp + dic[i].num;
end;
end;
ans:=ans+temp;
change:=ans;
end;
FUNCTION first(s:String):Longint;
var
temp :Longint;
i :Integer;
begin
temp:=0;
if pos(order[4].Inglish,s)>0 then
begin
i:=pos(order[4].Inglish,s);
temp:=temp+first(copy(s,1,i-1))*order[4].num;
delete(s,1,i+length(order[4].inglish));
temp:=temp+first(s);
first:=temp;
exit;
end;
if pos(order[3].Inglish,s)>0 then
begin
i:=pos(order[3].Inglish,s);
temp:=temp+Change(copy(s,1,i-1))*order[3].num;
delete(s,1,i+length(order[3].Inglish));
temp:=temp+ Change(s);
first:=temp;
exit;
end;
first:=change(s);
end;
PROCEDURE Main;
var
answer :Longint;
i,j :Integer;
begin
negative:=false;
answer:=first(s);
if negative then answer:=-answer;
writeln(answer);
end;
BEGIN
MakeDic;
while not eof do
begin
readln(s);
i:=2;
while (i<=length(s)) do
if (s[i]=' ')and(s[i-1]=' ') then delete(s,i,1) else inc(i);
if s='' then break;
Main;
end;
END.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?