整体的表达式计算采取倒叙计算,用a[]表示总和,b[]表示要加的数。
program P1040;
const
maxn=1500;
var
tot,i,len:longint;
a,b:array [0..maxn] of longint;
s:ansistring;
procedure sum;
var
ii:longint;
begin
for ii:=1 to len do//存的时候是反着存的,即数的最后一位表示位置1,这样就实现了个位的对齐。
begin
a[ii]:=a[ii]+b[ii];
a[ii+1]:=a[ii+1]+a[ii] div 10;
a[ii]:=a[ii] mod 10;
end;
end;
procedure print;
var
i:longint;
begin
i:=len;//从最长的位置向后找。
while a[i]=0 do dec(i);//去掉首位是0的部分。
while i>0 do
begin
write(a[i]);
dec(i);
end;
end;
begin
assign(input,'P1040.in'); reset(input);
assign(output,'P1040.out'); rewrite(output);
readln(s);
len:=length(s);
tot:=0;
for i:=len downto 1 do
begin
if s[i]<>'+' then
begin
inc(tot);
b[tot]:=ord(s[i])-48;//将一个加数存入数组中。
end
else
begin
if s[i]='+' then//直到出现加命令进行计算。
begin
sum;
fillchar(b,sizeof(b),0);//计算完成把b数组初始化。
tot:=0;//数组清零。
end;
end;
if i=1 then sum;//还要把第一个数加上。
end;
print;//输出结果
close(input); close(output);
end.