题目大意就是读入一个字符串,为一个加减法的表达式,例如
'3215+3214-45+1=' 的形式,让你计算结果
需要注意的是可能第一个字符是‘-’(负号),
而且中间过程也可能出问题
这就使得某些同学的打法会出问题,解决办法就是
在前面加一个比较大的数,
使计算过程中不会出现负数
代码如下
View Code
1 program sky;
2 const
3 maxn=100000; maxs='100000';
4 var
5 s,ss:string;
6 tp,tpp,x,y,k:longint;
7 ch:char;
8 function min(qq,ww:longint):longint;
9 begin
10 if qq<ww then exit(qq); exit(ww);
11 end;
12 begin
13 readln(s);
14 if s[1]='-' then s:=maxs+s else s:=maxs+'+'+s;
15 while pos('+',s)+pos('-',s)<>0 do
16 begin
17 tp:=pos('+',s); tpp:=pos('-',s);
18 if tp*tpp=0 then k:=tp+tpp else k:=min(tp,tpp);
19 ss:=copy(s,1,k-1); val(ss,x); ch:=s[k];
20 delete(s,1,k);
21 tp:=pos('+',s); tpp:=pos('-',s);
22 if tp+tpp=0 then
23 begin
24 ss:=copy(s,1,pos('=',s)-1);
25 val(ss,y);
26 if ch='+' then writeln(x+y-maxn) else writeln(x-y-maxn);
27 halt;
28 end;
29 if tp*tpp=0 then k:=tp+tpp else k:=min(tp,tpp);
30 ss:=copy(s,1,k-1);
31 val(ss,y);
32 if ch='+' then str(x+y,ss) else str(x-y,ss);
33 delete(s,1,k-1);
34 s:=ss+s;
35 end;
36 delete(s,length(s),1);
37 val(s,x);
38 writeln(x-maxn);
39 end.
可能不够简洁。提出意见多多交流