高精减

原创 2015年07月10日 09:47:03
代码一: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.

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

精减版printf

sstdio.c /* ---------------------------------------------------------------------------- * ...

精减版printf

转自:http://blog.csdn.net/xgbing/article/details/7642664

CAM350 10.5完美精减版

CAM350 10.5完美精减版:全自动安装,一次成功,无个人信息,无弹窗,无病毒! 免责申明:软件只用于测试和学习,任何版权纠纷均与本人无关,请支持正版!!!! 下载地址:http://u.11...

关于理解middlebury提供的立体匹配代码后的精减

Middlebury立体匹配源码总结 优化方法 图像可否预处理 代价计算可否采用BT方式 可选代价计算方法 可否代价聚合 可否MinFilter优化原始代价 WT...

archlinux 20140105版ISO精减安装为桌面工作环境

说明:本安装使用的镜象文件为目前最新的archlinux 20140105版ISO。安装步骤与我去年撰写的详细安装文档:http://blog.sina.com.cn/s/blog_69e5d8400...

基于DRBD实现MySQL高可用

基于DRBD实现MySQL高可用 一.基础知识 DRBD—Distributed Replicated Block Device 是一种基于Linux的软件组件, 它是由内核模块和相关程序而组成的...

滑动门最终精减版

  • 2007-09-13 22:00
  • 21KB
  • 下载

vpc 简体中文版精减版

  • 2010-05-11 08:35
  • 1.82MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)