2007-08-22

    高精度减法 - [Algorithms]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://conoon.blogbus.com/logs/7858328.html

    {说明:用字符串来存放减数和被减数,最大限制255位减255位}

    program jjzx;  {本程序没有考虑两负数相减}
    var s,s1,s2:string;
    a,b,c:array[1..260] of integer;
    i,l,m,k1,k2:integer;
    d:char;  {D用来表示正负号}
    begin
      writeln('input s1:');readln(s1);
      writeln('input s2:');readln(s2);
      l:=length(s1);    m:=length(s2);
      if l      begin
            s:=s1; s1:=s2; s2:=s; d:='-'
         end;
      if l=m then  {如果长度一样则直接比较,S1小就要与S2调换}
          if s1         begin
              s:=s1;s1:=s2;s2:=s;d:='-'
            end;
      l:=length(s1);  m:=length(s2);  {为什么要再次得到长度}
      k1:=261;  {为什么是261}
      for i:=l downto 1 do  {S1转换过程}
         begin
             k1:=k1-1;
             a[k1]:=ord(s1[i])-48
         end;
      k2:=261;
      for i:=m downto 1 do   {S2转换过程}
         begin
             k2:=k2-1;
             b[k2]:=ord(s2[i])-48
         end;

      for i:=260 downto k1 do  {开始计算}
          if a[i]          begin
               c[i]:=a[i]+10-b[i];
               a[i-1]:=a[i-1]-1   {为什么下标是I-1}
             end
           else
              c[i]:=a[i]-b[i];
      writeln('jie guo shi :');
      write(d:2);  {首先输出符号位}
      for i:=k1 to 260 do write(c[i]);
      writeln
    end.


    收藏到:Del.icio.us




    Tag:
    引用地址:

发表评论

您将收到博主的回复邮件
记住我