|| 返回 || 本站首页 ||奥赛信息||计算机基础||pascal基础||数据结构||经典算法||试题汇编||校本教程||自主练习||

|| 经典算法 >> 高精度减法

双击自动滚屏 

   

高精度减法



 

{说明:用字符串来存放减数和被减数,最大限制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.


 
 

 

 
 
 

制作与维护:重庆市忠县中学 谭海