Cod sursa(job #123523)
Utilizator | Data | 16 ianuarie 2008 12:33:42 | |
---|---|---|---|
Problema | A+B | Scor | 0 |
Compilator | fpc | Status | done |
Runda | Arhiva de probleme | Marime | 5.64 kb |
type vector=array[0..16]of integer;
var a,b,c,d:array[0..16]of integer;
s:string;
x:string;
z:char;
i,j,y:integer;
procedure adunare(a,b:vector);
var i,t:integer;
begin
t:=0;
i:=0;
while (i<a[0])or(i<b[0])or(t>0) do
begin
i:=i+1;
a[i]:=a[i]+b[i]+t;
t:=a[i] div 10;
a[i]:=a[i] mod 10;
if i>a[0] then a[0]:=a[0]+1;
end;
for i:=1 to a[0] do c[i]:=a[i];
c[0]:=a[0];
end;
procedure scadere(a,b:vector);
var i,t:integer;
begin
t:=0;
i:=0;
while (i<b[0])or(t>0) do
begin
i:=i+1;
a[i]:=a[i]-b[i]-t;
t:=0;
if a[i]<0 then
begin
t:=1;
a[i]:=a[i]+10;
end;
end;
i:=a[0];
while (a[i]=0)and(i>1) do
begin
a[0]:=a[0]-1;
i:=i-1;
end;
for i:=1 to a[0] do d[i]:=a[i];
d[0]:=a[0];
end;
begin
assign(input,'adun.in');
reset(input);
assign(output,'adun.out');
rewrite(output);
s:='';
while not eof do
begin
readln(x);
s:=s+x;
end;
i:=0;
while i< length(s) do
begin
i:=i+1;
if (s[i]>='0')and(s[i]<='9') then
begin
j:=i;
while (s[j]<>'+')and(s[j]<>'=')and(s[j]<>';') do
begin
j:=j+1;
z:=s[j];
end;
if z='+' then
begin
while (s[i]>='0')and(s[i]<='9') do
begin
a[0]:=a[0]+1;
a[a[0]]:=ord(s[i])-ord('0');
i:=i+1;
end;
end;
if z='=' then
begin
while (s[i]>='0')and(s[i]<='9') do
begin
b[0]:=b[0]+1;
b[b[0]]:=ord(s[i])-ord('0');
i:=i+1;
end;
end;
if z=';' then
begin
while (s[i]>='0')and(s[i]<='9') do
begin
c[0]:=c[0]+1;
c[c[0]]:=ord(s[i])-ord('0');
i:=i+1;
end;
end;
end;
if s[i]=';' then
begin
if (a[0]>0)and(b[0]>0)and(c[0]>0) then
begin
for j:=1 to b[0] div 2 do
begin
y:=b[j];
b[j]:=b[b[0]-j+1];
b[b[0]-j+1]:=y;
end;
for j:=1 to a[0] div 2 do
begin
y:=a[j];
a[j]:=a[a[0]-j+1];
a[a[0]-j+1]:=y;
end;
for j:=1 to c[0] div 2 do
begin
y:=c[j];
c[j]:=c[c[0]-j+1];
c[c[0]-j+1]:=y;
end;
end;
if a[0]=0 then
begin
for j:=1 to b[0] div 2 do
begin
y:=b[j];
b[j]:=b[b[0]-j+1];
b[b[0]-j+1]:=y;
end;
for j:=1 to c[0] div 2 do
begin
y:=c[j];
c[j]:=c[c[0]-j+1];
c[c[0]-j+1]:=y;
end;
scadere(c,b);
for j:=1 to d[0] do a[j]:=d[j];
a[0]:=d[0];
end;
if b[0]=0 then
begin
for j:=1 to a[0] div 2 do
begin
y:=a[j];
a[j]:=a[a[0]-j+1];
a[a[0]-j+1]:=y;
end;
for j:=1 to c[0] div 2 do
begin
y:=c[j];
c[j]:=c[c[0]-j+1];
c[c[0]-j+1]:=y;
end;
scadere(c,a);
for j:=1 to d[0] do b[j]:=d[j];
b[0]:=d[0];
end;
if c[0]=0 then
begin
for j:=1 to b[0] div 2 do
begin
y:=b[j];
b[j]:=b[b[0]-j+1];
b[b[0]-j+1]:=y;
end;
for j:=1 to a[0] div 2 do
begin
y:=a[j];
a[j]:=a[a[0]-j+1];
a[a[0]-j+1]:=y;
end;
adunare(a,b);
end;
for j:=a[0] downto 1 do
begin
write(a[j]);
a[j]:=0;
end;
write('+');
for j:=b[0] downto 1 do
begin
write(b[j]);
b[j]:=0;
end;
write('=');
for j:=c[0] downto 1 do
begin
write(c[j]);
c[j]:=0;
end;
writeln(';');
a[0]:=0;
b[0]:=0;
c[0]:=0;
end;
end;
close(output);
end.