高精度减法

高精度减法(a-b)(a>b且a,b均为正整数) 。从键盘读入两个正整数,求它们的差。
分析:类似加法,可以用竖式求减法。在做减法运算时,需要注意的是:被减数必须比减数大,同时需要处理借位。高精度减法的参考程序:
 1 program exam2;
 2 const
 3   max=200;
 4 var
 5   a,b,c:array[1..max] of 0..9;
 6   n,n1,n2:string;
 7   lena,lenb,lenc,i,x:integer;
 8 begin
 9   readln(n1);
10   readln(n2); {处理被减数和减数}
11   if (length(n1)<length(n2)) or (length(n1)=length(n2)) and (n1<n2) then
12   begin
13     n:=n1;n1:=n2;n2:=n;
14     write(’-’) {n1<n2,结果为负数}
15   end;
16   lena:=length(n1); lenb:=length(n2);
17   for i:=1 to lena do a[lena-i+1]:=ord(n1[i])-ord(’0’);
18   for i:=1 to lenb do b[lenb-i+1]:=ord(n2[i])-ord(’0’);
19    i:=1;
20    x:=0;
21    while (i<=lena) or(i<=lenb) do
22    begin
23      x := a[i] - b[i] + 10 + x; {不考虑大小问题,先往高位借10}
24      c[i] := x mod 10 ; {保存第i 位的值}
25      x := x div 10 - 1; {将高位借掉的1减去}
26      i := i + 1
27    end;
28   lenc:=i;
29   while (c[lenc]=0) and (lenc>1) do dec(lenc); {最高位的0 不输出}
30  for i:=lenc downto 1 do write(c[i]);
31  writeln
32 end.

 

posted @ 2015-12-05 19:57  ZJQCation  阅读(762)  评论(0编辑  收藏  举报