pascal语言,表达式求值问题!表达式计算express.pasTime Limit:1000MSMemory Limit:2048KB给定一个表达式串,计算其最后结果输入:一个表达式串(只包函+-*/()等运算符,且是整除;表达式长度小于255个字符)
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/04 02:29:53
![pascal语言,表达式求值问题!表达式计算express.pasTime Limit:1000MSMemory Limit:2048KB给定一个表达式串,计算其最后结果输入:一个表达式串(只包函+-*/()等运算符,且是整除;表达式长度小于255个字符)](/uploads/image/z/5173250-50-0.jpg?t=pascal%E8%AF%AD%E8%A8%80%2C%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%B1%82%E5%80%BC%E9%97%AE%E9%A2%98%21%E8%A1%A8%E8%BE%BE%E5%BC%8F%E8%AE%A1%E7%AE%97express.pasTime+Limit%3A1000MSMemory+Limit%3A2048KB%E7%BB%99%E5%AE%9A%E4%B8%80%E4%B8%AA%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B8%B2%2C%E8%AE%A1%E7%AE%97%E5%85%B6%E6%9C%80%E5%90%8E%E7%BB%93%E6%9E%9C%E8%BE%93%E5%85%A5%EF%BC%9A%E4%B8%80%E4%B8%AA%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B8%B2%EF%BC%88%E5%8F%AA%E5%8C%85%E5%87%BD%2B-%2A%2F%28%29%E7%AD%89%E8%BF%90%E7%AE%97%E7%AC%A6%2C%E4%B8%94%E6%98%AF%E6%95%B4%E9%99%A4%3B%E8%A1%A8%E8%BE%BE%E5%BC%8F%E9%95%BF%E5%BA%A6%E5%B0%8F%E4%BA%8E255%E4%B8%AA%E5%AD%97%E7%AC%A6%EF%BC%89)
pascal语言,表达式求值问题!表达式计算express.pasTime Limit:1000MSMemory Limit:2048KB给定一个表达式串,计算其最后结果输入:一个表达式串(只包函+-*/()等运算符,且是整除;表达式长度小于255个字符)
pascal语言,表达式求值问题!
表达式计算
express.pas
Time Limit:1000MS
Memory Limit:2048KB
给定一个表达式串,计算其最后结果
输入:
一个表达式串(只包函+-*/()等运算符,且是整除;表达式长度小于255个字符)
输出:
最后结果
输入:express.in
3+2*1
输出:express.out
5
提示(存在括号,还有负数的情况!);
叙述请详细一点……
有源代码更好!
pascal语言,表达式求值问题!表达式计算express.pasTime Limit:1000MSMemory Limit:2048KB给定一个表达式串,计算其最后结果输入:一个表达式串(只包函+-*/()等运算符,且是整除;表达式长度小于255个字符)
不知道对不对 错了请告诉我 谢谢
具体表达式计算的方法我就不说了 网上也可以找到 就是栈的操作而已
程序如下:
var n,i,CSignA,CNumbA:longint;
SignA:array[1..200] of char;
NumbA:array[1..200] of longint;
s,s0,s1:string;
b:array[1..300] of boolean;
function GetLevel(Sign:char):integer;//获取运算符优先等级
begin
if Sign='+' then exit(1)
else if Sign='-' then exit(1)
else if Sign='*' then exit(2)
else if Sign='/' then exit(2)
else if Sign='^' then exit(3)
else exit(0);
end;
function GetResult(Num1,Num2:longint;Sign:char):longint;//用于进行计算
var i:longint; j:longint;
begin
if Sign='+' then exit((num1+num2))
else if Sign='-' then exit((num1-num2))
else if Sign='*' then exit((num1*num2))
else if Sign='/' then exit((num1 div num2))
else if Sign='^' then begin
j:=num1;
for i:=2 to num2 do begin
j:=j*num1;
end;
exit(j);
end;
end;
function IsNumberic(Ch:char):boolean;//判断是否数字
begin
if (ch>='0')and(ch0 then begin skip:=skip-1; continue; end;
if s[i]='(' then push(s[i])
else if b[i] then begin//处理负数
push(0);
push('-');
end else if IsNumberic(s[i]) then begin//处理数字
j:=i;
num:=0;
while IsNumberic(s[j]) do begin num:=num*10+ChangeIntoNum(s[j]); inc(j); end;
skip:=j-1-i;
push(num);
end else if GetLevel(s[i])0 then begin
if CSignA=0 then push(s[i])
else begin
while GetLevel(s[i])