栾宫涅吧 关注:6贴子:216
  • 0回复贴,共1

高精度运算

只看楼主收藏回复

一部分:

var a,b,s:string; w:char;  la,lb:integer;
procedure fcal(as,bs:string; w:char);
var x,i:integer; a,b:array[1..20000]of integer;
begin
    for i:=1 to length(as) do a[length(as)-i+1]:=ord(as[i])-48;
    for i:=1 to length(bs) do b[length(bs)-i+1]:=ord(bs[i])-48;
    if la>lb then x:=la
             else x:=lb;
    if w='+' then
    begin
    for i:=1 to x do
    begin
        a[i]:=a[i]+b[i];
        a[i+1]:=a[i+1]+a[i]div 10;
        a[i]:=a[i]mod 10;
    end;{for}
    while a[x+1]<>0 do x:=x+1;
    la:=x-1;
    end;{+}

    if w='-' then
    begin
        for i:=1 to la do
        begin
            if a[i]<b[i] then begin
            dec(a[i+1]); a[i]:=a[i]+10;
            end;
            a[i]:=a[i]-b[i];
        end;
        while a[la]=0 do dec(la);
     {   dec(la);}
    end;{-}

    for i:=la+1 downto 1 do write(a[i]);
    writeln;
end;{fcal}
begin
    readln(a);
    readln(w);
    readln(b);
    la:=length(a);
    lb:=length(b);
    writeln('=');
    fcal(a,b,w);
    readln;
end.



1楼2006-06-13 17:36回复