用pascal求后缀表达式的值。
【问题描述】根据后缀算术表达式计算其值,注意相邻的数值型数据间用空格隔开,数据与运算符间也用空格隔开,表达式以@结束。计算的值保留两位小数,并对第三位四舍五入。如356+...
【问题描述】
根据后缀算术表达式计算其值,注意相邻的数值型数据间用空格隔开,数据与运算符间也用空格隔开,表达式以@结束。计算的值保留两位小数,并对第三位四舍五入。
如35 6 +@其值输出为41。
【输入】
输入一行以@结束的表达式
【输出】
结果
【样例】
输入
36 57 /@
输出
0.63
怎么做?(最好每一步都有解释) 展开
根据后缀算术表达式计算其值,注意相邻的数值型数据间用空格隔开,数据与运算符间也用空格隔开,表达式以@结束。计算的值保留两位小数,并对第三位四舍五入。
如35 6 +@其值输出为41。
【输入】
输入一行以@结束的表达式
【输出】
结果
【样例】
输入
36 57 /@
输出
0.63
怎么做?(最好每一步都有解释) 展开
4个回答
展开全部
program track;
var t1:array[1..10000] of longint;
top,n,i:integer;
rd:char;
f:boolean;
begin
rd:=' ';
top:=0;
f:=false;
while rd<>'@' do
begin
read(rd);
n:=0;
while (rd in ['0'..'9']) do
begin
f:=true;
n:=n*10+ord(rd)-ord('0');
read(rd);
end;
if f then begin
inc(top);
t1[top]:=n;
f:=false;end;
if rd in ['+','-','*','/'] then
begin
case rd of
'+':t1[top-1]:=t1[top-1]+t1[top];
'-':t1[top-1]:=t1[top-1]-t1[top];
'*':t1[top-1]:=t1[top-1]*t1[top];
'/':t1[top-1]:=t1[top-1] div t1[top];
end;
dec(top);
end;
end;
write(t1[1]);
end.
var t1:array[1..10000] of longint;
top,n,i:integer;
rd:char;
f:boolean;
begin
rd:=' ';
top:=0;
f:=false;
while rd<>'@' do
begin
read(rd);
n:=0;
while (rd in ['0'..'9']) do
begin
f:=true;
n:=n*10+ord(rd)-ord('0');
read(rd);
end;
if f then begin
inc(top);
t1[top]:=n;
f:=false;end;
if rd in ['+','-','*','/'] then
begin
case rd of
'+':t1[top-1]:=t1[top-1]+t1[top];
'-':t1[top-1]:=t1[top-1]-t1[top];
'*':t1[top-1]:=t1[top-1]*t1[top];
'/':t1[top-1]:=t1[top-1] div t1[top];
end;
dec(top);
end;
end;
write(t1[1]);
end.
展开全部
栈不解释
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
波兰算法 利用堆实现 并把符号定义优先级
- + 1级
*/ 2级
括号最高
一般的算法书上都有....
- + 1级
*/ 2级
括号最高
一般的算法书上都有....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好像不用那么复杂:
var a,b:real;c:char;
begin
read(a,b,c);
case c of
'+':write(a+b:0:2);
'-':write(a-b:0:2);
'*':write(a*b:0:2);
'/':write(a/b:0:2);
end.
var a,b:real;c:char;
begin
read(a,b,c);
case c of
'+':write(a+b:0:2);
'-':write(a-b:0:2);
'*':write(a*b:0:2);
'/':write(a/b:0:2);
end.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询