Chào bạn! Rất vui vì bạn đã vào thăm blog của tôi: -)

Bài mới nhất

Sửa Đóng
uses crt;
type TroChuSo=^ChuSoMoRong;
     ChuSoMoRong=record
                   ChuSo:char;
                   Next,Prev:TroChuSo;
                 end;
var Fa,Fb,Fc,La,Lb,Lc,Heap:TroChuSo;
 
procedure NhapSo(var Fs,Ls:TroChuSo);
var ch:char;
    S:TrochuSo;
begin
  Fs:=Nil;
  Ls:=Nil;
  repeat
    repeat ch:=readkey until ch in ['0'..'9',#13];
    if ch<>#13 then
      begin
        write(ch);
        New(S);
        S^.ChuSo:=ch;
        S^.Next:=Nil;
        if Fs=Nil then Fs:=S
        else Ls^.Next:=S;
        S^.Prev:=Ls;
        Ls:=S;
      end;
  until ch=#13;
  writeln;
end;
 
procedure XuatSo(Fs:TroChuSo);
var S:TrochuSo;
begin
  S:=Fs;
  while S<>Nil do
    begin
      write(S^.ChuSo);
      S:=S^.Next
    end;
  writeln;
end;
 
procedure CanBang(var Fa,La,Fb,Lb:TroChuSo);
var A,B,S:TroChuSo;
begin
  A:=La;
  B:=Lb;
  while (A<>Nil) and (B<>Nil) do
    begin
      A:=A^.Prev;
      B:=B^.Prev;
    end;
  if B=Nil then
    while A<>Nil do
      begin
        New(S);
        S^.ChuSo:='0';
        S^.Prev:=Nil;
        if Lb=Nil then Lb:=S
        else Fb^.Prev:=S;
        Fb:=S;
        A:=A^.Prev;
      end
  else
    if A=Nil then
      while B<>Nil do
        begin
          New(S);
          S^.ChuSo:='0';
          S^.Prev:=Nil;
          if La=Nil then La:=S
          else Fa^.Prev:=S;
          Fa:=S;
          B:=B^.Prev;
        end;
end;
 
procedure Cong(Fa,La,Fb,Lb:TroChuSo; var Fc,Lc:TroChuSo);
var A,B,C:TroChuSo;
    nho:byte;
begin
  CanBang(Fa,La,Fb,Lb);
  A:=La;
  B:=Lb;
  Fc:=Nil;
  Lc:=Nil;
  nho:=0;
  while (A<>Nil) do
    begin
      New(C);
      C^.ChuSo:=chr((ord(A^.ChuSo)-48+ord(B^.ChuSo)-48+nho) mod 10+48);
      nho:=(ord(A^.ChuSo)-48+ord(B^.ChuSo)-48+nho) div 10;
      C^.Prev:=Nil;
      if Lc=Nil then Lc:=C
      else Fc^.Prev:=C;
      C^.Next:=Fc;
      Fc:=C;
      A:=A^.Prev;
      B:=B^.Prev;
    end;
  if nho=1 then
    begin
      New(C);
      C^.ChuSo:='1';
      C^.Prev:=Nil;
      Fc^.Prev:=C;
      C^.Next:=Fc;
      Fc:=C;
    end;
end;
 
BEGIN
  Mark(Heap);
  repeat
    writeln('Nhap A = ');
    NhapSo(Fa,La);
    writeln('Nhap B = ');
    NhapSo(Fb,Lb);
    Cong(Fa,La,Fb,Lb,Fc,Lc);
    writeln('A+B=');
    XuatSo(Fc);
  until readkey=#27;
  Release(Heap);
END.
Chú ý:
Sắp có bài mới viết về chủ đề này, nhưng chỉ cần liên kết một chiều!