高精减

代码一:const max=200;
var
  s,sa,sb:string;
  a,b:array[1..max] of integer;
  len,la,lb, i:integer;
  fh:char;
begin
   readln(sa);   readln(sb);
   if sa=sb then begin writeln(0);halt;end;
   if (length(sa)<length(sb))or
        ((length(sa)=length(sb))and(sa<sb)) then
       begin fh:='-'; s:=sa; sa:=sb; sb:=s; end;

   la:=length(sa); lb:=length(sb);
   fillchar(a,sizeof(a),0);  fillchar(b,sizeof(b),0);
   for i:= la downto 1 do a[la-i+1]:=ord(sa[i])-ord('0');
   for i:= lb downto 1 do b[lb-i+1]:=ord(sb[i])-ord('0');
len:=la;
     for i:=1 to len do
        begin
         if a[i]<b[i] then
           begin
            a[i+1]:=a[i+1]-1;
            a[i]:=a[i]+10;
           end;
         a[i]:=a[i]-b[i];
        end;
     while a[len]=0 do len:=len-1;
     if fh='-' then write(fh);
     for i:=len downto 1 do write(a[i]);
     writeln;
end.
代码二:const 
    size= 200;
type
    hugeint = record
        len : integer;
        num : array[1..size] Of Integer;
    end;
var a,b:hugeint;
    s1,s2:string;
    i:integer;
function over(a, b : hugeint) : integer;
    var
        i : Integer;
    begin
        If (a.len>b.len) then
            begin
                over :=1 ;
                exit;
            end;
        if a.len < b.len then
            begin
                over := 2;
                exit;
            end;
        for i := a.len downto 1 do
            begin
                If a.num[i] > b.num[i] then
                    begin
                        over := 1;
                        exit;
                    end;
                if a.num[i] < b.num[i] then
                    begin
                        over := 2;
                 exit;
                    end;
            end;
        over := 3;
    end;
procedure minus(a,b:hugeint);
  var
   i:longint;
   t,ans:hugeint;
  begin
fillchar(ans.num,sizeof(ans.num),0);
 if over(a,b)=2 then
   begin
    write('-');
    t:=a;a:=b;b:=t;
   end;
 if over(a,b)=3 then begin writeln(0);exit;end;
 ans.len:=a.len;
 for i:=1 to ans.len do ans.num[i]:=a.num[i]-b.num[i];
 for i:=1 to ans.len do
  if ans.num[i]<0 then
   begin
     dec(ans.num[i+1]);
     inc(ans.num[i],10);
   end;
 while (ans.len>1)and(ans.num[ans.len]=0) do dec(ans.len);
 for i:=ans.len downto 1 do write(ans.num[i]);
 writeln;
end;
   procedure datain;
   begin
    //assign(input,'highminus.in');  assign(output,'highminus.out');
    //reset(input); rewrite(output);
    readln(s1);
    readln(s2);
    a.len:=length(s1);
    b.len:=length(s2);
    for i:=1 to a.len do  a.num[i]:=ord(s1[a.len-i+1])-ord('0');
    for i:=1 to b.len do  b.num[i]:=ord(s2[b.len-i+1])-ord('0');
   end;
   begin
    datain;
    minus(a,b);
   //close(input);close(output);
   end.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值