Pagini recente » Cod sursa (job #711564) | Istoria paginii utilizator/anita | Cod sursa (job #2092808) | Cod sursa (job #2450131) | Cod sursa (job #733640)
Cod sursa(job #733640)
var a:array[1..100000] of char;
t:text; n,i:int64;
function s2r(aa,b:int64):int64;
var i,c:longint; j:longint;
begin
c:=1;
j:=0;
for i:=1 to b-aa+1 do
begin
j:=j+(ord(a[aa-1+i])-ord('0'))*c;
c:=c*10;
end;
s2r:=j;
end;
function eval(left,right:int64):int64;
var p1,p2,p3,p4,pp,i :longint;
begin
p1:=0; p2:=0; p3:=0; p4:=0; pp:=0;
for i:=left to right do
if a[i]='(' then inc(pp)
else if a[i]=')' then dec(pp)
else if pp=0 then
case a[i] of
'+':p1:=i;
'-':p2:=i;
'*':p3:=i;
'/':p4:=i;
end;
if p1>p2 then eval:=eval(left,p1-1) + eval(p1+1,right)
else if p2>0 then eval:=eval(left,p2-1) - eval(p2+1,right)
else if p3>p4 then eval:=eval(left,p3-1) * eval(p3+1,right)
else if p4>0 then eval:=eval(left,p4-1) div eval(p4+1,right)
else if a[left]='(' then eval:=eval(left+1,right-1)
else eval:=s2r(left,right);
end;
begin
assign(t,'evaluare.in');
reset(t);
while not eoln(t) do
begin
inc(n);
read(t,a[n]);
end;
close(t);
assign(t,'evaluare.out');
rewrite(t);
write(t,eval(1,n));
close(t);
end.