模拟题7

题目大意就是读入一个字符串,为一个加减法的表达式,例如

'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.

可能不够简洁。提出意见多多交流

posted @ 2012-04-08 19:04  SunSky...  阅读(169)  评论(0编辑  收藏  举报